pylint 1.4 对所有C扩展报告了E1101(无成员)错误。

9 浏览
0 Comments

pylint 1.4 对所有C扩展报告了E1101(无成员)错误。

我们一直是pylint的忠实粉丝。它的静态分析已成为我们所有的Python项目中至关重要的一部分,并节省了大量追踪隐晦错误的时间。但在从1.3升级到1.4之后,几乎所有编译的C扩展都会导致E1101(no-member)错误。

以前在pylint 1.3下完全运行正常的项目,现在对几乎每个C扩展成员都投诉E1101。我们被迫关闭E1101错误,但这严重削弱了pylint的实用性。

例如,对lxml包的完全有效使用:

r"""valid.py: 演示pylint 1.4错误"""
from lxml import etree
print etree.Element('mydoc')

通过pylint运行,它报告:

$ pylint -rn valid.py
找不到配置文件,使用默认配置
************* Module valid
E:  3, 6: 模块 'lxml.etree' 没有 'Element' 成员 (no-member)

但它是完全有效的:

$ python valid.py

这里真的很奇怪。只有非常少的几个C扩展似乎可以在pylint中正常工作,例如:

r"""valid2.py: 这一个可以正常工作"""
import sqlite3
print sqlite3.version
$ pylint -rn valid2.py
找不到配置文件,使用默认配置

我的问题是,还有其他人见过这个问题吗?如果是这样,你愿意分享你的解决方法吗?

我们试过创建插件来抑制这些警告

http://docs.pylint.org/plugins.html#enter-plugin),但我们很难理解文档 - 并且astroid基类非常复杂,我们无法理解它。

对于真正的加分(和我们永远的感激),我们希望了解pylint中发生了什么变化。我们很乐意修复代码(或至少发布一个适用于C扩展的最佳实践文档),以满足pylint的要求。

平台详细信息:

$ pylint --version
找不到配置文件,使用默认配置
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)]

0