就看這篇部落格吧:
一篇搞定所有的異常處理,講的很詳細。
異常
python中各種異常也是類,類exception繼承自類baseexception,還有其他各種異常等等,此外,通過繼承baseexception或者exception可以自定義異常。
異常處理
python直譯器檢測到錯誤,觸發異常(也允許程式設計師自己觸發異常);程式設計師編寫特定的**,專門用來捕捉這個異常(這段**與程式邏輯無關,與異常處理有關);如果捕捉成功則進入另外乙個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理。
異常處理幫助debug,通過更加豐富的資訊,讓人們更容易找到bug的所在。異常處理可以提高程式的容錯性。
常用語法結構:
如果錯誤可預知,可以使用if語句進行處理,預防錯誤
如果錯誤不可預知,則需要用到try..except:在錯誤發生之後進行處理
try: ...
except
exception1:
...except
exception2:
...except
: ...
else
: ...
finally
: ...
如果try中有異常發生時,將執行異常的歸屬,執行except。異常層層比較,看是否是exception1, exception2...,直到找到其歸屬,執行相應的except中的語句。如果except後面沒有任何引數,那麼表示所有的exception都交給這段程式處理。
如果try中沒有異常,那麼except部分將跳過,執行else中的語句。
finally是無論是否有異常,最後都要做的一些事情。
流程如下,
try->異常->except->finally
try->無異常->else->finally
如果無法將異常交給合適的物件,異常將繼續向上層丟擲,直到**捉或者造成主程式報錯,如:
deftest_func():
try:
m = 1/0
except
nameerror:
print("
catch nameerror in the sub-function")
try:
test_func()
except
zerodivisionerror:
print("
catch error in the main program
")
子程式的try...except...結構無法處理相應的除以0的錯誤,所以錯誤被拋給上層的主程式。
raise語句
主動觸發異常
自定義異常
需要class類
斷言:aeesrt條件判斷
斷言關鍵字aeesrt,
assert 語句(塊)
當這個關鍵字後邊的條件為假的時候,程式自動崩潰並丟擲assertionerror的異常。一般來說我們可以用assert在程式中置入檢查點,當需要確保程式中某個條件一定為真才能讓程式正常工作的話,assert關鍵字就非常有用了。
python學習筆記 異常處理
try 多個except else finally語句 try 塊是此語句的主要動作,嘗試執行的 except分句捕獲且處理try 塊內引發的異常,else分句是try沒有發生異常時要執行的處理器。finally語句不管異常是否發生都會去執行的,如果沒有異常發生,執行完try 塊後執行finally...
python學習筆記 異常處理
什麼是異常 異常就是程式執行時發生錯誤的訊號 在程式出現錯誤時,則會產生乙個異常,若程式沒有處理它,則會 丟擲該異常,程式的執行也隨之終止 語法錯誤 不按照語言基準來寫 print hello 邏輯錯誤 res 1 0 zerodivisionerror l 1.2 l 10 indexerror ...
python學習筆記 異常處理
assertionerror 斷言語句失敗 attributeerror 嘗試訪問未知的物件屬性 indexerror 索引超出序列的範圍 keyerror 字典中查詢乙個不存在的關鍵字 nameerror 嘗試訪問乙個不存在的變數 oserror 作業系統產生的異常 syntaxerror pyt...