前言
在先前的一些章節裡你已經執行了一些程式碼,你一定遇到了程式“崩潰”或因未解決的錯誤而終止的情況。你會看到“跟蹤記錄(traceback)”訊息以及隨後直譯器向你提供的資訊,包括錯誤的名稱、原因和發生錯誤的行號。不管你是通過 Python 直譯器執行還是標準的指令碼執行,所有的錯誤都符合相似的格式,這提供了一個一致的錯誤介面。所有錯誤,無論是語意上的還是邏輯上的,都是由於和 Python 直譯器不相容導致的,其後果就是引發異常。
我們來看幾個異常的例子。
NameError
嘗試訪問一個未申明的變數
NameError 表示我們訪問了一個沒有初始化的變數。
在 Python 直譯器的符號表沒有找到那個那個被呼叫的變數。任何可訪問的變數必須先定義才能使用,訪問變數需要由直譯器進行搜尋,如果請求的名字沒有在任何名稱空間裡找到,那麼將會生成一個NameError 異常。
ZeroDivisionError
除數為零
任何數值被零除都會導致一個 ZeroDivisionError 異常。
SyntaxError
Python直譯器語法錯誤
SyntaxError 代表Python程式碼中有一個不正確的結構,在它改正之前程式無法執行。
IndexError
請求的索引超出序列範圍
IndexError 在你嘗試使用一個超出範圍的值索引序列時引發。
KeyError
請求一個不存在的字典關鍵字
對映物件,例如字典,是依靠關鍵字(key)訪問資料值的。如果使用錯誤的或是不存在的鍵請求字典就會引發一個KeyError異常。
IOError
操作的檔案不存在
類似嘗試開啟一個不存在的磁碟檔案一類的操作會引發一個作業系統輸入/輸出(I/O)錯誤。任何型別的I/O錯誤都會引發IOError異常。
AttributeError
嘗試訪問未知的物件屬性
在我們的例子中,我們在 myInst.bar 儲存了一個值,也就是例項 mylnst 的 bar 屬性。屬性被定義後,我們可以使用熟悉的點/屬性操作符訪問它,但如果是沒有定義屬性,例如我們訪問 foo 屬性,將導致一個 AttributeError 異常。