python 丟擲異常 python 異常

2021-10-11 19:43:03 字數 3597 閱讀 2809

異常的概念

捕獲異常

異常的傳遞

丟擲異常

程式在執行時,如果 python 直譯器 遇到 到乙個錯誤,會停止程式的執行,並且提示一些錯誤資訊,這就是 異常

程式停止執行並且提示錯誤資訊 這個動作,我們通常稱之為:丟擲(raise)異常

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

2.1 簡單的捕獲異常語法

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

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

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

except 如果不是,下方編寫嘗試失敗的**

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

try: # 提示使用者輸入乙個數字 num = int(input("請輸入數字:"))except: print("請輸入正確的數字")
2.2 錯誤型別捕獲在程式執行時,可能會遇到 不同型別的異常,並且需要 針對不同型別的異常,做出不同的響應,這個時候,就需要捕獲錯誤型別了

語法如下:

try: # 嘗試執行的** pas***cept 錯誤型別1: # 針對錯誤型別1,對應的**處理 pas***cept (錯誤型別2, 錯誤型別3): # 針對錯誤型別2 和 3,對應的**處理 pas***cept exception as result: print("未知錯誤 %s" % result)
當 python 直譯器 丟擲異常 時,最後一行錯誤資訊的第乙個單詞,就是錯誤型別

異常型別捕獲演練 —— 要求使用者輸入整數

需求提示使用者輸入乙個整數

使用 8 除以使用者輸入的整數並且輸出

try: num = int(input("請輸入整數:")) result = 8 / num print(result)except valueerror: print("請輸入正確的整數")except zerodivisionerror: print("除 0 錯誤")
捕獲未知錯誤

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

如果希望程式 無論出現任何錯誤,都不會因為 python 直譯器 丟擲異常而被終止,可以再增加乙個 except

語法如下:

except exception as result: print("未知錯誤 %s" % result)
2.3 異常捕獲完整語法在實際開發中,為了能夠處理複雜的異常情況,完整的異常語法如下:

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

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

try: # 嘗試執行的** pas***cept 錯誤型別1: # 針對錯誤型別1,對應的**處理 pas***cept 錯誤型別2: # 針對錯誤型別2,對應的**處理 pas***cept (錯誤型別3, 錯誤型別4): # 針對錯誤型別3 和 4,對應的**處理 pas***cept exception as result: # 列印錯誤資訊 print(result)else: # 沒有異常才會執行的** passfinally: # 無論是否有異常,都會執行的** print("無論是否有異常,都會執行的**")
else 只有在沒有異常時才會執行的**

finally 無論是否有異常,都會執行的**

之前乙個演練的 完整捕獲異常 的**如下:

try: num = int(input("請輸入整數:")) result = 8 / num print(result)except valueerror: print("請輸入正確的整數")except zerodivisionerror: print("除 0 錯誤")except exception as result: print("未知錯誤 %s" % result)else: print("正常執行")finally: print("執行完成,但是不保證正確")
異常的傳遞 —— 當 函式/方法 執行 出現異常,會 將異常傳遞 給 函式/方法 的 呼叫一方

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

提示在開發中,可以在主函式中增加 異常捕獲

而在主函式中呼叫的其他函式,只要出現異常,都會傳遞到主函式的 異常捕獲 中

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

需求定義函式 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.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 extry: user_pwd = input_password() print(user_pwd)except exception as result: print("發現錯誤:%s" % result)

python丟擲異常

1 python 使用 raise 語句丟擲乙個指定的異常。raise nameerror hithere traceback most recent call last file line 1,in module raise nameerror hithere nameerror hithere ...

python 丟擲 python丟擲異常的方法

python丟擲異常的方法 閱讀 89 異常是python物件,表示乙個錯誤。當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。常見異常 attributeerror 呼叫不存在的方法引發的異常 eoferror 遇到檔案末尾引發的異常 importerror 匯入模組出錯引發的...

python 丟擲異常 Python之異常

目標 01.異常的概念 程式開發時,很難將所有的特殊情況都處理的面面俱到,通過異常捕獲可以針對突發事件做集中的處理,從而保證程式的穩定性和健壯性 02.捕獲異常2.1 簡單的捕獲異常語法 try 嘗試執行的 except 出現錯誤的處理簡單異常捕獲演練 要求使用者輸入整數 try 提示使用者輸入乙個...