2011-02-26 102 views
1

我寫一個函數,它接受用戶輸入:捕捉NameError和錯誤處理

def func(input): 

我把嘗試和節選,以確保輸入是我想要的類型。但是,當我放入testInput時,它會拋出一個NameError與「testInput」。

我明白爲什麼,因爲它認爲testInput是一個變量名,而它知道「testInput」是一個字符串。

有沒有一種智能的方法來捕捉這個錯誤?

+0

我不認爲這裏有足夠的信息來充分回答你的問題。你能提供一個實際的函數和調用代碼的例子嗎? – 2011-03-03 21:43:44

回答

4

NameError通常是由未定義的變量名稱造成的。如果使用testInput作爲變量名稱,即不帶引號,則必須先定義它。嘗試是這樣的:

testInput = "my_input_test" 
func(testInput) 

或者你可以只使用字符串本身作爲參數:

func("my_input_test") 

有時錯別字也可以導致未定義的變量名,然後NameError

聲音就像你的try ... except聲明在你的函數中,錯誤發生在函數體執行之前,所以你不能在函數體內捕獲它。爲了演示如何捕獲這個錯誤,你可以嘗試下面的代碼。

# !!! DEMO ONLY. DON'T DO THIS. 
try: 
    func(testInput) 
except NameError: 
    # Your code here 

重要:NameErrors通常是你需要修復您的變量/功能/類名的指示。使用try ... except來捕捉它們通常是一種不好的做法,並且會導致混亂且不可用的代碼。

+0

這不是一個好主意,趕上'NameError'你應該修改代碼。 – jfs 2011-03-27 06:02:20

+0

@ J.F。完全同意你的看法。我在最後一句中提到過。 – 2011-03-27 13:02:03

+0

這確認了一個通用規則,即在教科書中不應出現無效代碼片斷,或至少應該有一個更突出的警告:「不要做」。 – jfs 2011-03-28 10:47:19