Python3.2 官方文檔翻譯--錯誤與異常
第六章?錯誤和異常
直到如今錯誤信息還沒有被涉及到。但你假設已經嘗試了實例你可能已經看到一些相關信息。
在python中至少有兩種不同的錯誤:syntax?errors?和exceptions
6.1?語法錯誤(syntax?errors)
???語法錯誤,也就是編譯錯誤,當你開始學習python時,這樣的錯誤可能是你最常見的抱怨。
>>>?while?True?print(’Hello?world’)
File?"<stdin>",?line?1,?in??
while?True?print(’Hello?world’)
^
SyntaxError:?invalid?syntax
?
語法分析器會知道出錯的語句,並在檢查到錯誤的位置前面顯示一個小“箭頭”。
錯誤是因為箭頭編輯的字符引起的或者至少探測到的。在樣例中。在函數print()上探測到錯誤,因為在它前面少了一個:.從文本輸入情況下,?文件名和行數將會被打印出來,因此在你能夠知道從哪兒定位錯誤。
8.2?異常
假設語句和表達式在語法上是正確的,當嘗試去執行它時可能會產生一個錯誤。在執行過程中被檢測到的錯誤稱為異常和程序不會無條件的崩潰。
接下來你會學到在python程序中怎樣處理異常。
可是,很多異常不能被程序處理。就會導致例如以下的錯誤信息:
>>>?10*(1/0)
Traceback?(most?recent?call?last):
File?"<stdin>",?line?1,?in??
ZeroDivisionError:?int?division?or?modulo?by?zero
>>>?4?+?spam*3
Traceback?(most?recent?call?last):
File?"<stdin>",?line?1,?in??
NameError:?name?’spam’?is?not?defined
>>>?’2’?+?2
Traceback?(most?recent?call?last):
File?"<stdin>",?line?1,?in??
TypeError:?Can’t?convert?’int’?object?to?str?implicitly
錯誤信息的最後一行描寫敘述產生錯誤的原因,異常產生有不同方式而且錯誤類型會作為信息的一部分打印出來:?在實例中錯誤信息是?ZeroDivisionError,NameError和TypeError。
?作為錯誤類型打印出來的字符串是出如今內置異常的名稱。
這對內置異常是正常的結果。但對於用戶自己定義異常(雖然這是一個實用的規範)就不可而知了。標準異常的名稱都是內置的標識符。(這不是保留keyword)。
剩下的行信息基於異常類型和產生原因提供更加具體信息。
錯誤信息的前面部分會顯示異常發生的上下文。而且以棧的形式打印出來。總的來說,它包括一個包括源碼的堆棧的列表;可是它不會顯示從標準行讀取的信息。
Bltin-exception顯示內置全部的異常和全部的信息。
Python3.2 官方文檔翻譯--錯誤與異常