Python提供了兩個非常重要的功能來處理python程序在運行中出現的異常和錯誤:異常、斷言
異常處理
異常即是一個事件(在Python中是一個對象),該事件會在Python無法正常處理程序時就會發生,影響了程序的正常執行。每個錯誤都有名稱,當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
以下是完整的try語句結構,try語句可以嵌套,try中定義的變量可以在函數其他地方使用。
try: # 需要捕獲異常的代碼塊
block
except exception: # 有多種形式
block
else: # 沒有異常執行的語句塊
block
finally: # 無論是否發生異常都將執行的語句塊
block
try中包含的代碼塊,如果執行出錯,則後續代碼不會繼續執行,而是直接跳轉至錯誤處理代碼。如果錯誤代碼沒有使用try捕獲,或者捕獲的錯誤在 except列表沒有相應的處理,它就會一直往上拋,最後被Python解釋器捕獲,打印一個錯誤信息,然後程序退出。
except列表,其中[, Argument] 可以替換為 [as Argument],支持[,語法]與[as語法]。
1、except:
捕獲所有的異常
2、except ExceptionType[, Argument]: 或 except (ExceptType1, ExceptType2, …), Argument/as Argument
捕捉指定的異常,Argument表示異常實例,攜帶異常信息,Argument.message
3、except(Exception1[, Exception2[,...ExceptionN]]])[, Argument]:
一次捕獲列表中的多種異常
觸發異常
當程序出現錯誤,python會自動引發異常,也可以通過raise顯示地引發異常。一旦執行了raise語句,raise後面的語句將不能執行。
raise [ExceptionType [, args [, traceback]]]
或者
raise ExceptionType(args) #使用異常類的構造函數創建一個異常對象
1、raise
將攔截到的異常錯誤原樣拋出扔給上層處理
2、參數解釋
ExceptionType:異常的類型(例如,NameError)
args:參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是"None"。
traceback:最後一個參數是可選的,traceback,未提供則是None
自定義異常
通過創建一個新的異常類,程序可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。
在Python已知的類不滿足的時候,可以定義一個自定義異常類:
class NewException(Exception):
pass
斷言
Python中使用 assert 來使用斷言,起到調試的作用。啟動Python解釋器攜帶 -O 參數可以關閉斷言。
assert expression # 如果 expression 為False, 則觸發一個 AssertionError 異常
閱讀更多 小碼寒江雪 的文章