Python學習筆記9——異常處理
就看這篇博客吧:一篇搞定所有的異常處理,講的很詳細。
異常
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
如果無法將異常交給合適的對象,異常將繼續向上層拋出,直到被捕捉或者造成主程序報錯,如:
def test_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學習筆記9——異常處理