2016-03-08 51 views
4

我有以下Python代碼pylint的不只是中定義的「其他」條款

a = 2 
if a == 1: 
    b = 'blah' 
    print b 
else: 
    print b 

當我嘗試運行它,我得到一個運行時錯誤,因爲「B」檢測未定義的變量'如果'條款,而不是'其他'。

Pylint和Pyflakes都未能檢測到此問題。

有沒有其他的方式可以檢測到它,而無需運行代碼?

+1

即時通訊相當確定pycharm lint這種事情對我來說......也許不是......稍後檢查 –

+0

Pycharm確實能夠檢測到這一點,但我試圖添加一個linter到自動化構建過程,所以我不知道是否可以使用它。 – freakazoid

+0

嘗試pychecker也許?我認爲這就是所謂的 –

回答

2

我不認爲沒有運行代碼就可以檢測到它,因爲一般情況下,工作中可能會有比您的示例更復雜的邏輯。怎麼樣一個循環多次迭代這個if - else子句,並且由於某種原因,你肯定第一次肯定會分配b?檢查者需要與解釋器一樣複雜(並且執行類似的操作,可能包括副作用)以瞭解程序運行的所有可能狀態。查看靜態代碼檢查的概念。

+0

控制流分析[在astroid路線圖上](https://github.com/PyCQA/astroid/issues/213)(pylint背後的圖書館)。雖然它肯定不會檢測到像你所描述的複雜情況,但將來它將能夠分析可以推斷條件結果的簡單情況(如@ freakazoid的示例)。 –