pyhon捕捉異常&&常見錯誤歸納!

      網友投稿 1013 2025-03-31

      在Python運行遇到異常時,程序會終止;而在我們編程過程中,錯誤是不可避免的,這時我們需要捕捉到異常,還需要程序繼續運行;這時我們就需要根據異常Traceback到出錯點,進行分析改正;

      1. 異常捕獲

      當發生異常時,我們就需要對異常進行捕獲,然后進行相應的處理。python的異常捕獲常用try…except…結構,把可能發生錯誤的語句放在try模塊里,用except來處理異常,每一個try,都必須至少對應一個except。

      1.1 捕獲所有異常

      捕獲所有異常的語句如下:

      #?捕獲所有異常try: ?????<語句>????#?需要被判斷的語言塊except: ?????<異常處理語句>???#?出現異常后的處理語句12345

      例子:

      import?systry: ????sys.exit()except: ????print('異常被捕捉到啦~~')#?輸出:#?'異常被捕捉到啦~~'12345678

      以上語句中,由于沒有指定異常,所有的異常都將被捕捉,甚至包括鍵盤中斷和程序退出請求;(try后的語句中如果使用sys.exit(),無法退出python程序,因為sys.exit()作為異常被捕獲了;)

      try: <語句>????except?Exception: <異常處理語句>???#?出現異常后的處理語句1234

      例子:

      import?systry: ????sys.exit()except?Exception: ????print('異常被捕捉到啦~~')#?程序退出了,說明沒有捕捉到異常;1234567

      在except后增加Exception,可以捕捉全部異常,但是不會捕捉鍵盤中斷和程序退出請求;

      1.2 捕捉指定異常

      捕捉指定異常,只需要在except后增加異常的名稱即可;這里的異常名稱可以使用報錯的異常名稱;

      #?捕捉指定異常try: ?????<語句>except?<異常名>: <異常處理語句>???#?出現異常后的處理語句12345

      1.3 捕捉多個異常

      把需要捕捉的異常名稱全部列在except后,這時異常沒有優先級,全部捕捉;

      #?捕捉多個異常,不區分優先級try: ?????<語句>except?(<異常名1>,?<異常名2>,?...): <異常處理語句>???#?出現異常后的處理語句12345

      如果需要區分異常的優先級,則將except按照優先級分開處理,舉例如下:

      #?捕捉多個異常,區分優先級try: ?????<語句>except?<異常名1>: print('異常說明1') ?except?<異常名2>: print('異常說明2') ?except?<異常名3>: print('異常說明3')123456789101112

      處理順序:當異常發生時,先執行異常名1的語句,如果匹配則執行:print(‘異常說明1’),若不匹配,則執行異常名2,以此類推;

      備注:1. 這種方式可以支持的except語句的數量沒有限制; 2. 如果都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。

      1.4 異常中的else

      當try語句中沒有某些異常時,我們可以添加else語句,來執行其他語句;即:若有異常發生則執行異常處理語句,若無異常發生,則執行else語句;

      #?異常中的elsetry: <語句>except?<異常名1>: <異常處理語句>???#?有異常發生時,執行該語句 ?else: <語句>??#?無異常發生時,則執行該語句123456789

      1.5 異常中的finally

      有些時候,無論try語句中是否有異常,我們都希望執行一些語句,這時候需要使用finally語句;即:無論異常是否發生,都會執行finally語句;

      pyhon捕捉異常&&常見錯誤歸納!

      #?異常中的finally語句try: ?????<語句> ?finally: ??????<語句>123456

      2. 用戶自定義異常_raise 主動觸發異常

      在python編程中,我們可以主動觸發異常,即:我們可以規定何種情況下生成何種異常;

      def?not_zero(num): ????try: ????????if?num?==?0: ????????????raise?ValueError('參數為0,參數錯誤') ????????return?num????except?Exception?as?e: ????????print('錯誤類型為:',e.__class__.__name__) ????????print('錯誤詳情為:',e)not_zero(0)1234567891011

      輸出:

      錯誤類型為:?ValueError 錯誤詳情為:?參數為0,參數錯誤12

      3. 查看異常位置_traceback模塊

      有時我們需要打印出發生異常的位置,就需要使用traceback模塊;舉例如下:

      import?tracebacktry: ????1/0except?Exception?as?e: ????print(e) ????print('---------------------') ????traceback.print_exc() ????print('---------------------') ????a?=?traceback.format_exc() ????print(a) ????print('---------------------')1234567891011

      輸出:

      #?print(e)的輸出結果division?by?zero------------------------------------------#?print(a)?的輸出結果Traceback?(most?recent?call?last): ??File?"D:/PY_useful/3_python?基礎/11.異常處理.py",?line?21,?in? ????1/0ZeroDivisionError:?division?by?zero---------------------#?traceback.print_exc()的輸出結果,默認的位置是輸出結果的最后位置,如本例中,輸出在最后Traceback?(most?recent?call?last): ??File?"D:/PY_useful/3_python?基礎/11.異常處理.py",?line?21,?in? ????1/0ZeroDivisionError:?division?by?zero12345678910111213141516

      4. 常見異常名 & 描述

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel表格如何設置自動備份
      下一篇:2010excel表格怎么打印到一張紙上(excel表格打印在一張紙上)
      相關文章
      亚洲性色高清完整版在线观看| 1区1区3区4区产品亚洲| 亚洲天堂久久精品| 亚洲乱亚洲乱妇无码麻豆| 亚洲午夜在线一区| 亚洲AV无码国产精品色午友在线| 久久亚洲精品无码观看不卡| 亚洲人成网站日本片| 亚洲韩国精品无码一区二区三区 | 精品亚洲成a人片在线观看| 亚洲精品无码一区二区 | 久久亚洲日韩看片无码| 精品国产亚洲一区二区三区 | 亚洲无线码在线一区观看| 亚洲人成免费电影| 亚洲女初尝黑人巨高清| 国产亚洲一区二区精品| 亚洲午夜无码片在线观看影院猛| 亚洲AV成人一区二区三区观看| 亚洲av永久无码精品漫画| 亚洲精品成人片在线观看| 麻豆亚洲AV成人无码久久精品 | 亚洲福利视频一区二区| 国产成人亚洲综合网站不卡| 亚洲六月丁香婷婷综合| 久久精品国产亚洲77777| 亚洲A∨无码一区二区三区| 黑人大战亚洲人精品一区| 亚洲色欲色欲www在线播放| 亚洲综合av一区二区三区不卡| 亚洲精品色午夜无码专区日韩| 亚洲最大成人网色香蕉| 无码天堂亚洲国产AV| 亚洲国产人成中文幕一级二级| 中文亚洲AV片在线观看不卡| 亚洲av日韩av激情亚洲| 亚洲国产成人精品无码区在线网站 | 亚洲一区二区三区电影| 亚洲女同成人AⅤ人片在线观看| 爱情岛论坛网亚洲品质自拍| 国产l精品国产亚洲区在线观看|