站長資訊網
        最全最豐富的資訊網站

        Python 異常處理機制詳解

        Python 異常處理機制詳解

        要了解try except異常處理的用法,簡單來說,當位于 try 塊中的程序執(zhí)行出現(xiàn)異常時,會將該種異常捕獲,同時找到對應的 except 塊處理該異常,那么這里就有一個問題,它是如何找到對應的 except 塊的呢?

        我們知道,一個 try 塊也可以對應多個 except 塊,一個 except 塊可以同時處理多種異常。如果我們想使用一個 except 塊處理所有異常,就可以這樣寫:

        try: #…except Exception: #…

        這種情況下,對于 try 塊中可能出現(xiàn)的任何異常,Python解釋器都會交給僅有的這個 except 塊處理,因為它的參數(shù)是 Exception,表示可以接收任何類型的異常。

        注意,對于可以接收任何異常的 except 來說,其后可以跟 Exception,也可以不跟任何參數(shù),但表示的含義都是一樣的。

        這里就要詳細介紹一下 Exception。要知道,為了表示程序中可能出現(xiàn)的各種異常,Python 提供了大量的異常類,這些異常類之間有嚴格的繼承關系,圖 1 顯示了 Python 的常見異常類之間的繼承關系。

        Python 異常處理機制詳解

        從圖 1 中可以看出,BaseException 是Python 中所有異常類的基類,但對于我們來說,最主要的是Exception 類,因為程序中可能出現(xiàn)的各種異常,都繼承自 Exception。

        因此,如果用戶要實現(xiàn)自定義異常,不應該繼承 BaseException ,而應該繼承 Exception 類。關于如何自定義一個異常類,可閱讀《Python自定義異常類》一節(jié)。

        當 try 塊捕獲到異常對象后,Python 解釋器會拿這個異常類型依次和各個 except 塊指定的異常類進行比較,如果捕獲到的這個異常類,和某個 except 塊后的異常類一樣,又或者是該異常類的子類,那么 Python 解釋器就會調用這個 except 塊來處理異常;反之,Python 解釋器會繼續(xù)比較,直到和最后一個 except 比較完,如果沒有比對成功,則證明該異常無法處理。

        圖 2 演示了位于 try 塊中的程序發(fā)生異常時,從捕獲異常到處理異常的整個流程。

        Python 異常處理機制詳解

        下面看幾個簡單的異常捕獲的例子:

        try:   a = int(input("輸入 a:"))   b = int(input("輸入 b:"))   print( a/b ) except ValueError:   print("數(shù)值錯誤:程序只能接收整數(shù)參數(shù)") except ArithmeticError:   print("算術錯誤") except Exception:   print("未知異常")

        該程序中,根據用戶輸入 a 和 b 值的不同,可能會導致 ValueError、ArithmeticError 異常:

        • 如果用戶輸入的 a 或者 b 是其他字符,而不是數(shù)字,會發(fā)生 ValueError 異常,try 塊會捕獲到該類型異常,同時 Python 解釋器會調用第一個 except 塊處理異常;

        • 如果用戶輸入的 a 和 b 是數(shù)字,但 b 的值為 0,由于在進行除法運算時除數(shù)不能為 0,因此會發(fā)生 ArithmeticError 異常,try 塊會捕獲該異常,同時 Python 解釋器會調用第二個 except 塊處理異常;

        • 當然,程序運行過程中,還可能由于其他因素出現(xiàn)異常,try 塊都可以捕獲,同時 Python 會調用最后一個 except 塊來處理。

        當一個 try 塊配有多個 except 塊時,這些 except 塊應遵循這樣一個排序規(guī)則,即可處理全部異常的 except 塊(參數(shù)為 Exception,也可以什么都不寫)要放到所有 except 塊的后面,且所有父類異常的 except 塊要放到子類異常的 except 塊的后面。

        推薦教程:《Python教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 日韩精品国产自在久久现线拍| 国产精品一区二区三区99 | 久久精品成人国产午夜| 伊人久久精品无码av一区| 成人精品一区二区三区免费看| 久久久久99精品成人片欧美| 欧美成人精品欧美一级乱黄码| 久久国产精品99精品国产987| 日产精品久久久一区二区| 热综合一本伊人久久精品| 国产色精品vr一区区三区| 奇米精品一区二区三区在线观看| 国产精品视频一区二区三区四| 亚洲国产精品无码AAA片| 日本精品少妇一区二区三区| 久久九九亚洲精品| 久久国产精品久久国产精品| 国产成人精品日本亚洲11| 国产精品视频一区二区噜噜| 四虎国产精品永久在线观看| 欧美精品整片300页| 精品久久人人做人人爽综合| 91久久精品视频| 日本精品久久久久中文字幕| 精品国产一区二区三区久久| 99国产精品久久| 精品亚洲永久免费精品| 久久精品一区二区三区中文字幕| 97久人人做人人妻人人玩精品| 久久这里只有精品首页| 欧美精品人爱c欧美精品| 久久这里只精品国产99热| 欧美精品亚洲精品日韩专区va| 华人在线精品免费观看| 欧美精品888| 国产成人高清精品免费观看| 国产乱子伦精品无码专区| 老司机精品影院91| 一本色道久久88—综合亚洲精品| 亚洲精品国产精品乱码不卡√| 久久久久99精品成人片直播|