我们一直是pylint
的长期粉丝。它的静态分析已经成为我们所有python项目的重要组成部分,并且节省了大量的时间来追逐晦涩的bug。但从1.3 - > 1.4升级后,几乎所有编译的c扩展都会导致E1101(无成员)错误。pylint 1.4对所有C分机报告E1101(非会员)
以前完全通过pylint
1.3运行完全清洁的项目现在几乎所有的C扩展成员都抱怨E1101。我们被迫停用E1101错误,但这实质上会减损pylint
的用处。
例如,通过pylint
这一完全合法的使用lxml
包
r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
运行这一点,并报告:
$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E: 3, 6: Module 'lxml.etree' has no 'Element' member (no-member)
但它是完全合法的:
$ python valid.py
<Element mydoc at 7fddf67b1ba8>
这是它变得非常奇怪的地方。 C扩展的一个非常小的一小撮似乎通过pylint
工作得很好,例如:
r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version
$ pylint -rn valid2.py
No config file found, using default configuration
我的问题是,有其他人见证了这一点?如果是这样,你愿意分享你的解决方法吗?
我们已经尝试,试图创建插件来抑制这些警告 (http://docs.pylint.org/plugins.html#enter-plugin),但我们遇到的困难做头或文档的尾巴 - 和astroid
基类是超级复杂和蔑视我们试图饶舌它。
对于真正的奖励积分(以及我们永恒的感激之情),我们很乐意了解pylint
中发生了哪些变化。我们很乐意修复代码(或者至少为C扩展作者发布最佳实践文档),以满足pylint
。
平台细节
$ pylint --version
No config file found, using default configuration
pylint 1.4.0,
astroid 1.3.2, common 0.63.2
Python 2.7.5 (default, Jul 1 2013, 18:09:11)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]
非常感谢你。不过,我必须注意到,选项3不幸似乎不适用于某些STL包,例如'multiprocessing'。 – 4ae1e1 2015-06-10 07:59:27
对于#4,这个文档似乎直接解决了如何修正假阳性'no-member's - http://docs.pylint.org/plugins.html – 2015-07-22 02:34:43
@SpainTrain链接已经死亡。 – ppperry 2016-07-07 19:40:49