日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python中的异常处理详解

發布時間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中的异常处理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 異常的概念

  • 程序在運行時,如果 Python 解釋器 遇到 到一個錯誤,會停止程序的執行,并且提示一些錯誤信息,這就是 異常

  • 程序停止執行并且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常

?

程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性

2. 捕獲異常

2.1 簡單的捕獲異常語法

  • 在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 try(嘗試) 來 捕獲異常

  • 捕獲異常最簡單的語法格式:

try:嘗試執行的代碼 except:出現錯誤的處理
  • try 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼

  • except 如果不是,下方編寫嘗試失敗的代碼

簡單異常捕獲演練 —— 要求用戶輸入整數

try:# 提示用戶輸入一個數字num = int(input("請輸入數字:")) except:print("請輸入正確的數字")

2.2 錯誤類型捕獲

  • 在程序執行時,可能會遇到 不同類型的異常,并且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了

  • 語法如下:

try:# 嘗試執行的代碼pass except 錯誤類型1:# 針對錯誤類型1,對應的代碼處理pass except (錯誤類型2, 錯誤類型3):# 針對錯誤類型2 和 3,對應的代碼處理pass except Exception as result:print("未知錯誤 %s" % result)
  • 當 Python 解釋器 拋出異常 時,最后一行錯誤信息的第一個單詞,就是錯誤類型

異常類型捕獲演練 —— 要求用戶輸入整數

需求

  • 提示用戶輸入一個整數

  • 使用 8 除以用戶輸入的整數并且輸出

  • try:num = int(input("請輸入整數:"))result = 8 / numprint(result) except ValueError:print("請輸入正確的整數") except ZeroDivisionError:print("除 0 錯誤")

    捕獲未知錯誤

    • 在開發時,要預判到所有可能出現的錯誤,還是有一定難度的

    • 如果希望程序 無論出現任何錯誤,都不會因為 Python 解釋器 拋出異常而被終止,可以再增加一個 except

    語法如下:

    except Exception as result:print("未知錯誤 %s" % result)

    2.3 異常捕獲完整語法

    • 在實際開發中,為了能夠處理復雜的異常情況,完整的異常語法如下:

    提示:

    • 有關完整語法的應用場景,在后續學習中,結合實際的案例會更好理解

    • 現在先對這個語法結構有個印象即可

    try:# 嘗試執行的代碼pass except 錯誤類型1:# 針對錯誤類型1,對應的代碼處理pass except 錯誤類型2:# 針對錯誤類型2,對應的代碼處理pass except (錯誤類型3, 錯誤類型4):# 針對錯誤類型3 和 4,對應的代碼處理pass except Exception as result:# 打印錯誤信息print(result) else:# 沒有異常才會執行的代碼pass finally:# 無論是否有異常,都會執行的代碼print("無論是否有異常,都會執行的代碼")
    • else 只有在沒有異常時才會執行的代碼

    • finally 無論是否有異常,都會執行的代碼

    • 之前一個演練的 完整捕獲異常 的代碼如下:

    try:num = int(input("請輸入整數:"))result = 8 / numprint(result) except ValueError:print("請輸入正確的整數") except ZeroDivisionError:print("除 0 錯誤") except Exception as result:print("未知錯誤 %s" % result) else:print("正常執行") finally:print("執行完成,但是不保證正確")

    3. 異常的傳遞

    • 異常的傳遞 —— 當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方

    • 如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止

    提示

    • 在開發中,可以在主函數中增加 異常捕獲

    • 而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲

    • 這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔

    需求

  • 定義函數 demo1() 提示用戶輸入一個整數并且返回

  • 定義函數 demo2() 調用 demo1()

  • 在主程序中調用 demo2()

  • def demo1():return int(input("請輸入一個整數:")) ? ? def demo2():return demo1() ? try:print(demo2()) except ValueError:print("請輸入正確的整數") except Exception as result:print("未知錯誤 %s" % result)

    4. 拋出 raise 異常

    4.1 應用場景

    • 在開發中,除了 代碼執行出錯 Python 解釋器會 拋出 異常之外

      • 還可以根據 應用程序 特有的業務需求 主動拋出異常

      示例

    • 提示用戶 輸入密碼,如果 長度少于 8,拋出 異常

    ?

    注意

    • 當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理

    • 因此可以 拋出異常,由其他需要處理的函數 捕獲異常

    4.2 拋出異常

    • Python 中提供了一個 Exception 異常類

    • 在開發時,如果滿足特定業務需求時,希望拋出異常,可以:

    • 創建 一個 Exception 的 對象

    • 使用 raise 關鍵字 拋出 異常對象

    需求

    • 定義 input_password 函數,提示用戶輸入密碼

    • 如果用戶輸入長度 < 8,拋出異常

    • 如果用戶輸入長度 >=8,返回輸入的密碼

    def input_password(): ?# 1. 提示用戶輸入密碼pwd = input("請輸入密碼:") ?# 2. 判斷密碼長度,如果長度 >= 8,返回用戶輸入的密碼if len(pwd) >= 8:return pwd ?# 3. 密碼長度不夠,需要拋出異常# 1> 創建異常對象 - 使用異常的錯誤信息字符串作為參數ex = Exception("密碼長度不夠") ?# 2> 拋出異常對象raise ex ? ? try:user_pwd = input_password()print(user_pwd) except Exception as result:print("發現錯誤:%s" % result)

    5.記錄錯誤

    如果不捕獲錯誤,自然可以讓Python解釋器來打印出錯誤堆棧,但程序也被結束了。既然我們能捕獲錯誤,就可以把錯誤堆棧打印出來,然后分析錯誤原因,同時,讓程序繼續執行下去。

    Python內置的logging模塊可以非常容易地記錄錯誤信息:

    import logging ? ? def foo(s):return 10 / int(s) ? ? def bar(s):return foo(s) * 2 ? ? def main():try:bar('0')except Exception as e:logging.exception(e) ? ? main() print('END')

    同樣是出錯,但程序打印完錯誤信息后會繼續執行,并正常退出:

    $ python3 err_logging.py ERROR:root:division by zero Traceback (most recent call last):File "err_logging.py", line 13, in mainbar('0')File "err_logging.py", line 9, in barreturn foo(s) * 2File "err_logging.py", line 6, in fooreturn 10 / int(s) ZeroDivisionError: division by zero END

    通過配置,logging還可以把錯誤記錄到日志文件里,方便事后排查。

    總結

    以上是生活随笔為你收集整理的Python中的异常处理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。