異常是Python對象,表示一個錯誤。異常是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。
異常主要依賴5個關鍵字try:這個關鍵詞是異常拋出必須使用的。該關鍵字後的代碼塊是程序正常功能的代碼實現,可能會引發異常。是進行異常捕捉、處理的前提。
except:包含對應異常類型和處理這種異常類型的代碼塊。
else:位於多個except塊後,當程序不出現異常時,執行else塊。
finally:必須位於所有except塊之後,主要用於回收try塊裡面打開的物理資源。
raise:引發一個實際的異常。raise只有一個參數,用來指定要被拋出的異常,它必須是一個異常的實例或者是一個異常的類(也就是Exception的子類)。
異常的捕捉&處理 try:
邏輯代碼塊
except 異常類型:
異常處理邏輯
如果在運行時發生異常,解釋器會查找相應的處理語句(稱為handler)。
要是在當前函數裡沒有找到的話,它會將異常傳遞給上層的調用函數,看看那裡能不能處理。
如果在最外層(全局「main」)還是沒有找到的話,解釋器就會退出,同時列印出traceback以便讓用戶找到錯誤產生的原因。
常見的異常ImportError
無法引入模塊或包,大部分是路徑問題或名稱錯誤
IOError
輸入輸出異常,大部分是無法打開文件。
TypeError
傳入對象類型與要求的不符合
NameError
使用一個還未被賦予對象的變量
ValueError
傳入一個調用者不期望的值,即使值的類型是正確的。
KeyError
嘗試訪問字典裡不存在的鍵
IndexError
索引錯誤,一般用於list,指定的偏移量超過了列表的長度範圍。
SyntaxError
Python代碼邏輯語法出錯,不能執行
keyboardInterrupt
用戶中斷執行
UnboundLocalError
試圖訪問一個還未設置的全局變量,基本上是由於另一個同名的全局變量,導致你以為在訪問。
AttributeError
試圖訪問一個對象沒有的屬性
IndentationError
語法錯誤,代碼沒有正確的對齊
AssertionError
assert語句失敗
異常類的繼承異常類的繼承 自定義異常,應該繼承Exception類
訪問異常詳細信息的辦法如果程序想要在except中訪問異常對象的相關信息,可以通過為異常對象聲明變量來實現。
異常對象中包含 args和with_traceback(),其中args該屬性返回異常的錯誤編號和描述字符串。with_traceback()方法處理異常的傳播軌跡信息,Python程序的traceback信息均來源於一個叫做traceback object的對象,而這個traceback object通常是通過函數sys.exc_info()來獲取的。