異常
- 程序運行過程中,不可避免的會出現一些錯誤,如變量未賦值就使用,索引越界等
- 程序運行過程中,一旦出現異常,程序將會立即停止,異常以後的代碼不會執行
處理異常
- python希望在出現異常時,我們可以編寫代碼來對異常進行處理
try語句
try:
代碼塊(可能出現錯誤的語句)
except:
代碼塊(出現錯誤後的處理方式)
else:
代碼塊(沒出錯時要執行的語句)
finally:
代碼塊(該代碼塊始終都執行)
try語句必須有,else語句可有無,
try中語句出錯時,會執行except語句中的代碼
try語句沒有錯誤時,else中的代碼會執行
異常的傳播
- 當函數中出現異常時,如果在函數中對異常進行處理,則異常不會在傳播;如果函數中沒有處理,則傳遞到調用處;
從函數裏異常處傳遞到調用處
- 如果函數調用處處理了異常則不傳播,如果沒處理則繼續傳播,直至傳遞到全局作用域時還沒有處理,則程序終止,並顯示異常。
異常對象
- 如果except後不跟任何內容,則此時它會捕獲所有異常,如果在except後跟着一個異常類型,則只捕獲該類型的異常;如果在except後面跟一個exception則和不跟任何內容一樣;
try:
代碼塊(可能出現錯誤的語句)
except 異常:
代碼塊(出現錯誤後的處理方式)
else:
代碼塊(沒出錯時要執行的語句)
輸出一個未定義的變量會引起NameError異常
在except後指定NameError,則except只捕獲NameError異常
捕獲多個異常時可以寫多個except語句,但這種方式程序只會捕捉第一個異常不會管後面的;
查看異常對象
except exception as e:
print(‘未知異常’,e,type(e))
finally
- finally 子句不管怎麼樣,都會執行
finally:
代碼塊
出現異常時,finally語句執行
不出現異常時,finally語句執行
拋出異常
- raise可以用於向外部拋出異常,後面可以跟一個異常類或異常類的實例
- 拋出異常的目的是告訴調用者這裏調用時出現問題,希望它自己處理
- 自定義異常類,創建一個類繼承Exception即可