2012-04-24 76 views
8

我有一些代碼使用簡單的tcp套接字設置來測試一些東西。 我們在我們的python文件上運行pylint --errors-only,通常作爲驗證我們所有代碼的一種方式。如何防止python pylint抱怨套接字類sendall方法

然而,蟒蛇套接字庫文件上給出的簡單示例代碼 - http://docs.python.org/library/socket.html - 將輸出:

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

文檔顯示這些成員的代碼運行和工作。

插座的目錄顯示他們現有的太:

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

這是下降到片段:

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

在socket.py實施。

可以讓pylint接受這種風格(並驗證它),或者是唯一選擇忽略「no member」警告與# pylint: disable-msg=E1101

回答

7

您可以使用pylint --errors-only --ignored-classes=_socketobject或添加

ignored-classes=SQLObject,_socketobject 

~/.pylintrc文件。

documenation

忽略類

類名稱爲哪些構件屬性 不應被檢查列表(有用的類的屬性動態地 集)。

默認:的SQLObject

+0

將此添加到rc文件非常有用。這意味着該對象根本沒有檢查,但比本地禁用更好。 – 2012-04-24 20:56:31

+0

調用這個答案 - 因爲它今天會工作。 sthenault的答案很好 - 但需要更多努力。然而,這是一項崇高的努力 - 讓它進入github,使用社區的pylint可以開始貢獻核心和共同的lib部分。 – 2012-04-24 20:57:39

+1

是的,我的回答相比之下感覺很不好,而且對於我們真正需要的東西來說確實過於寬泛,但希望不要過於寬泛以致導致問題。 – bossylobster 2012-04-25 00:36:04

1

使用http://www.logilab.org/blogentry/78354中定義的技巧,我們可以開始向pylint添加一個通用的astng插件,這將幫助他從stdlib中理解這些內容(還有關於跟蹤器中的hashlib的各種門票/評論)。

這確實是一個很大的改進。任何志願者? :)

除此之外,我不認爲有其他選擇而不是禁用該消息。

+0

我喜歡這一點 - 它是一個非常靈活的方法,也可以使pylint的事情像Django的設置更加友好。 – 2012-04-24 20:55:26