1. 程式人生 > >Python學習筆記9——異常處理

Python學習筆記9——異常處理

不可 rod int ise 繼續 沒有 except 事情 font

就看這篇博客吧:一篇搞定所有的異常處理,講的很詳細。

異常

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——異常處理