我有一些代码使用简单的tcp套接字设置来测试某些东西。
我们在python文件上运行pylint --errors-only
,通常用作验证所有代码的方法。
但是,python套接字库文档中给出的简单示例代码 - 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
文档显示了这些成员,代码运行并运行。
socket的目录也显示它们存在:
>>> 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接受此样式(并对其进行验证),或者是忽略# pylint: disable-msg=E1101
的“无成员”警告的唯一选择?
答案 0 :(得分:8)
您可以使用pylint --errors-only --ignored-classes=_socketobject
或添加
[TYPECHECK]
ignored-classes=SQLObject,_socketobject
到您的~/.pylintrc
文件。
来自documenation,
<强>忽略类强>:
成员属性的类名列表 不应该检查(对于具有动态属性的类很有用 设定)。
默认值: SQLObject
答案 1 :(得分:1)
使用http://www.logilab.org/blogentry/78354中定义的技巧,我们可以开始向pylint添加一个通用的astng插件,这将有助于他从stdlib中了解这些内容(在跟踪器中还有关于hashlib的各种票证/评论)。
这确实是一个伟大的改进。有志愿者吗? :)
除此之外,我认为除了禁用该消息之外还有其他选择。