我有以下Python代碼pylint的不只是中定義的「其他」條款
a = 2
if a == 1:
b = 'blah'
print b
else:
print b
當我嘗試運行它,我得到一個運行時錯誤,因爲「B」檢測未定義的變量'如果'條款,而不是'其他'。
Pylint和Pyflakes都未能檢測到此問題。
有沒有其他的方式可以檢測到它,而無需運行代碼?
我有以下Python代碼pylint的不只是中定義的「其他」條款
a = 2
if a == 1:
b = 'blah'
print b
else:
print b
當我嘗試運行它,我得到一個運行時錯誤,因爲「B」檢測未定義的變量'如果'條款,而不是'其他'。
Pylint和Pyflakes都未能檢測到此問題。
有沒有其他的方式可以檢測到它,而無需運行代碼?
我不認爲沒有運行代碼就可以檢測到它,因爲一般情況下,工作中可能會有比您的示例更復雜的邏輯。怎麼樣一個循環多次迭代這個if
- else
子句,並且由於某種原因,你肯定第一次肯定會分配b
?檢查者需要與解釋器一樣複雜(並且執行類似的操作,可能包括副作用)以瞭解程序運行的所有可能狀態。查看靜態代碼檢查的概念。
控制流分析[在astroid路線圖上](https://github.com/PyCQA/astroid/issues/213)(pylint背後的圖書館)。雖然它肯定不會檢測到像你所描述的複雜情況,但將來它將能夠分析可以推斷條件結果的簡單情況(如@ freakazoid的示例)。 –
即時通訊相當確定pycharm lint這種事情對我來說......也許不是......稍後檢查 –
Pycharm確實能夠檢測到這一點,但我試圖添加一個linter到自動化構建過程,所以我不知道是否可以使用它。 – freakazoid
嘗試pychecker也許?我認爲這就是所謂的 –