我們一直是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