1. 程式人生 > >十、異常處理

十、異常處理

行處理 可能 如果 自定義 PE AI 判斷 由於 不能

異常是錯誤發生的信號

一、異常分為三部分

1、異常的追蹤信息

2、異常的類型

3、異常的值

二、異常的分類

1、語法異常

這類異常應該在程序執行前就改正

2、邏輯異常

AttributeError 試圖訪問一個對象沒有的屬性
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤的子類;代碼沒有正確對齊
IndexError 下標索引超出序列邊界
KeyError 試圖訪問字典裏不存在的鍵
KeyboardInterrupt ctrl+c被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError 代碼非法,代碼不能編譯
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上與由於另有一個同名的全局變量,導致你以為你正在訪問它
ValueError 傳入一個調用者不期望的值,即使值的類型是正確的

三、異常處理

如果錯誤發生的條件是可預知的,可用if判斷處理,在錯誤發生前進行預防;
如果錯誤發生的條件是不可預知的,則需要用到try...except...,在錯誤發生之後進行處理

基本語法:

try:

代碼塊

except 異常類型:

代碼塊

try語句按照如下方式工作:
1、首先執行try子句(在關鍵字和關鍵字except之間的語句)
2、如果沒有異常發生,忽略except子句,try子句執行後結束
3、如果在執行try子句的過程中發生了異常,那麽try子句余下的部分將被忽略。如果異常的類型和except之後的名稱相符,那麽對應的except子句將被執行。最後執行try語句之後的代碼
4、如果一個異常沒有與任何的except匹配,那麽這個異常將會傳遞給上層的try中

一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有一個分支會被執行。

處理程序將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程序中的異常。
一個except子句可以同時處理多個異常,這些異常將被放在一個括號裏成為一個元組

萬能異常處理:

try:

代碼塊

except Exception as 別名 #把異常的值賦值給一個別名

代碼塊

try...else...

else不能單獨使用,必須與except連用,意思是else的子代碼塊會在沒有任何異常的情況下執行

try...finally

無論有沒有異常發生都會執行,用在回收系統資源的時候

主動觸發異常:
raise

斷言:

assert

自定義異常

通過創建一個新的exception類來擁有自己的異常。異常應該繼承自Exception類

十、異常處理