2012-04-24 7 views
8

Ho un po 'di codice utilizzando una semplice configurazione del socket TCP per testare qualcosa. Eseguiamo pylint --errors-only sui nostri file python, generalmente come un modo per convalidare tutto il nostro codice.Come impedire a Python Pylint di lamentarsi del metodo Sendall della classe socket

Tuttavia, il semplice codice di esempio riportato sulla documentazione della libreria Python presa - http://docs.python.org/library/socket.html - uscita volontà:

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

La documentazione mostra questi membri, le piste di codici e opere.

Un dir di presa mostra loro esistente troppo:

>>> 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'] 

Questo è giù per il frammento:

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

Nell'attuazione socket.py.

È possibile fare un comando per accettare questo stile (e convalidarlo) oppure è l'unica opzione per ignorare gli avvisi di "nessun membro" con # pylint: disable-msg=E1101?

risposta

7

È possibile utilizzare pylint --errors-only --ignored-classes=_socketobject o aggiungere

ignored-classes=SQLObject,_socketobject 

al file ~/.pylintrc.

Dal documenation,

ignorati-classi:

Elenco delle classi di nomi per il quale attribuisce non dovrebbero essere messi membro (utile per le classi con gli attributi dinamicamente SET).

predefinito: SQLObject

+0

Aggiungerlo al file rc ha molto senso. Significa che l'oggetto non riceve alcun controllo, ma è più piacevole delle disabilitazioni locali. –

+0

Chiamare questa risposta - perché funzionerà oggi. La risposta di sthenault è buona, ma richiederà uno sforzo maggiore. Tuttavia, è uno sforzo nobile: mettetelo in github e il macchinista che usa la comunità può iniziare a contribuire con parti di base e comuni di lib. –

+1

Sì, la mia risposta sembrava hacky in confronto, e certamente troppo ampia per ciò di cui abbiamo veramente bisogno, ma si spera non sia così ampia da causare problemi. – bossylobster

1

utilizzando il trucco definito in http://www.logilab.org/blogentry/78354, potremmo iniziare ad aggiungere a pylint un generico plugin astng che lo aiuterebbe a capire tali cose dallo stdlib (ci sono anche vari ticket/commenti su hashlib nel tracker).

Sarebbe davvero un grande miglioramento. Qualunque volontario? :)

Oltre a ciò, non penso ci siano altre opzioni che disabilitare il messaggio.

+0

mi piace questo - si tratta di un approccio molto flessibile, e potrebbe anche fare pylint più amichevole con le cose come setup Django. –

Problemi correlati