2012-04-24 7 views
8

Tengo un poco de código usando una configuración simple de socket tcp para probar algo. Ejecutamos pylint --errors-only en nuestros archivos python, generalmente como una forma de validar todo nuestro código.Cómo evitar que python pylint se queje sobre el método sendall de clase de socket

Sin embargo, el simple código de ejemplo que se da en la documentación de la biblioteca de Python zócalo - http://docs.python.org/library/socket.html - es la salida:

************* Module SocketExample 
E: 16: Instance of '_socketobject' has no 'recv' member 
E: 18: Instance of '_socketobject' has no 'sendall' member 

La documentación muestra estos miembros, se ejecuta el código y obras.

a dir de toma de muestra les existente también:

>>> import socket 
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
>>> dir(s) 
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__weakref__', '_sock', 'accept', 'bind', 'close', 'connect', 'connect_ex', 'dup', 'family', 'fileno', 'getpeername', 'getsockname', 'getsockopt', 'gettimeout', 'listen', 'makefile', 'proto', 'recv', 'recv_into', 'recvfrom', 'recvfrom_into', 'send', 'sendall', 'sendto', 'setblocking', 'setsockopt', 'settimeout', 'shutdown', 'type'] 

Esto se debe al fragmento:

for method in _delegate_methods: 
     setattr(self, method, getattr(_sock, method)) 

En la implementación socket.py.

¿Se puede hacer para aceptar este estilo (y validarlo) o es la única opción para ignorar las advertencias de "no miembro" con # pylint: disable-msg=E1101?

Respuesta

7

Puede utilizar pylint --errors-only --ignored-classes=_socketobject o añadir

ignored-classes=SQLObject,_socketobject 

a su archivo ~/.pylintrc.

Desde el documenation,

ignoradas clases:

Lista de clases de nombres para los que atribuye no debe comprobarse miembro (útil para las clases con atributos dinámicamente Set).

defecto: SQLObject

+0

Agregar eso al archivo rc tiene mucho sentido. Significa que el objeto no obtiene ninguna comprobación en absoluto, pero es más agradable que las inhabilidades locales. –

+0

Llamar a esto la respuesta, porque funcionará hoy. La respuesta de sthenault es buena, pero requerirá más esfuerzo. Sin embargo, es un esfuerzo noble: conseguirlo en github y la comunidad de uso de pilones puede comenzar a contribuir con partes de lib comunes y comunes. –

+1

Sí, mi respuesta me pareció hacky en comparación, y sin duda demasiado amplia para lo que realmente necesitamos, pero con suerte no tan amplia como para causar problemas. – bossylobster

1

usando el truco se define en http://www.logilab.org/blogentry/78354, podríamos empezar a añadir a pylint un plugin astng genérico que le ayudaría a entender estas cosas de la stdlib (también hay varias entradas/comentarios acerca de hashlib en el tracker).

Eso sería una gran mejora de hecho. Cualquier voluntario ? :)

Además de esto, no creo que haya otras opciones que deshabilitar el mensaje.

+0

me gusta esto - es un enfoque muy flexible, y también podría hacer pylint más amigable con cosas como las configuraciones de Django. –

Cuestiones relacionadas