pylint 1.4 对所有C扩展报告了E1101(无成员)错误。
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)]