我们一直是pylint
。它的静态分析已经成为我们所有 python 项目的关键部分,并且节省了大量的时间来追踪隐藏的错误。但从 1.3 -> 1.4 升级后,几乎所有编译的 c 扩展都会导致 E1101(no-member) 错误。
之前运行完美的项目pylint
1.3 现在几乎每个 C 扩展成员都抱怨 E1101。我们被迫禁用 E1101 错误,但这大大降低了pylint
.
例如,这个完全有效的使用lxml
package
r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
运行这个pylint
,它报告:
$ 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
, e.g.:
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 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)]