2012-08-23 42 views
1

下面是一個Python腳本的例子:如何警告可能的NameError?

n, dollar, euro = map(input().split()) 
if n == 1: 
    print(dolar/euro) # Note the typo, 'dolar' vs. 'dollar' 
else: 
    print(euro/dollar) 

我犯了一個錯誤( 「DOLAR」 一個 'L')。除非你進入n = 1解釋器將無法通知的error(NameError)甚至警告。

我怎樣才能的,在運行時通知?

+5

寫一個測試套件。 –

+0

此外,您呼叫'map'錯誤和不必要的:'N,美元,歐元= input.split()' – chepner

+0

Downvoters:這是一個合理的問題。正因爲存在這樣的情況'dolar'旨在正確並不意味着它是不是有用的提醒你注意它的工具角落的情況。 – chepner

回答

0

Python不能告訴你未來的運行時間,因爲有插入「DOLAR」到符號表的方式出現在該行之前,和Python無法檢測到您是否已經做到了,直到它實際上企圖跑線。由於喬希李所說的那樣,最好的辦法是做一個測試套件(至少是)鍛鍊你的代碼的每一行。

7

pylint將報告爲E: 3: Undefined variable 'dolar',以及給你很多有用的風格提示。

Python本身不能做出像這樣的編譯時錯誤,因爲它不能真正地告訴你不動態創建該名稱,而不運行導致它的代碼。 (pylint的會考慮它,即使你碰巧要做到這一點,這是很好的,因爲如果你寫的代碼一樣,你值得擁有它拿下嚴重錯誤......)

3

使用pylint的:

sucmac:~ ajung$ /tmp/bin/pylint ou.py 
No config file found, using default configuration 
************* Module ou 
W: 3,0: Bad indentation. Found 3 spaces, expected 4 
W: 5,0: Bad indentation. Found 3 spaces, expected 4 
C: 1,0: Missing docstring 
C: 1,0: Invalid name "n" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) 
C: 1,3: Invalid name "dollar" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) 
C: 1,11: Invalid name "euro" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) 
W: 1,18: Used builtin function 'map' 
W: 1,22: Used builtin function 'input' 
E: 3,9: Undefined variable 'dolar' 
相關問題