本節包括異常的定義,異常的捕獲,異常的傳遞及拋出異常。
1. 異常
異常:程序在運行時,如果Python解釋器遇到一個錯誤,會停止程序的執行,並且會提示一些錯誤的信息。
程序停止執行並且提示錯誤信息這個動作就是拋出異常
所以:
通過異常捕獲可以針對突發事件做集中的處理,從而保證程序的穩定性和健壯性。
2. 捕獲異常
如果對某些代碼的執行不能確定是否正確,可以使用**try:**來捕獲異常
語法:
try:
嘗試執行的代碼
except:
出現錯誤的處理
描述:當try中的代碼出現錯誤,則執行except中的代碼
代碼演示:
try:
num = int(input("請輸入一個整數"))
except:
# 錯誤的處理代碼
print("請輸入正確的整數")
結果:
請輸入一個整數a
請輸入正確的整數
2.1 針對錯誤類型來捕獲異常
異常有很多類型,需要對不同類型的異常,做出不同的響應。
語法:
try:
#嘗試執行的代碼
pass
except 錯誤類型1:
#對應的代碼處理
except 錯誤類型2:
#對應的代碼處理
except Exception as result:
print("未知錯誤%s"% result)
捕獲未知錯誤:
語法
except Exception as result:
print("未知錯誤%s"% result)
當出現異常時,最後一行錯誤信息的第一個單詞,就是錯誤類型。
示例:
try:
num = int(input("請輸入一個整數"))
result = 8/num
print(result)
except ZeroDivisionError:
print("分母不能爲0")
except ValueError:
print("請輸入正確的整數")
try:
num = int(input("請輸入一個整數"))
result = 8/num
print(result)
# except ZeroDivisionError:
# print("分母不能爲0")
except ValueError:
print("請輸入正確的整數")
except Exception as res:
print("未知錯誤%s"%res)
請輸入一個整數0
未知錯誤division by zero
2.2 異常捕獲的完整語法:
try:
#嘗試執行的代碼
pass
except 錯誤類型1:
#對應的代碼處理
except 錯誤類型2:
#對應的代碼處理
except Exception as result:
print("未知錯誤%s"% result)
else:
#沒有異常纔會執行的代碼
finally:
#無論是否有異常,都會執行的代碼
代碼演示:
try:
num = int(input("請輸入一個整數"))
result = 8/num
print(result)
# except ZeroDivisionError:
# print("分母不能爲0")
except ValueError:
print("請輸入正確的整數")
except Exception as res:
print("未知錯誤%s"%res)
else:
print("程序正常執行")
finally:
print("無論是否異常,都會執行")
3. 異常的傳遞
當函數/方法執行出現異常,會將異常傳遞給函數/方法的調用一方
如果傳遞到主函數,仍然沒有異常處理,程序纔會被終止。
因此:
可以在主函數中,增加異常捕獲
def demo1():
return int(input("請輸入一個整數"))
def demo2():
return demo1()
try:
print(demo2())
except Exception as result:
print("未知錯誤%s" %result)
請輸入一個整數d
未知錯誤invalid literal for int() with base 10: 'd'
4. 拋出raise異常
1.創建Exception異常對象
2.使用raise拋出異常
def input_password():
pw = input("請輸入密碼")
if len(pw) >= 8:
return pw
print("主動拋出異常")
# 1.創建異常對象-可以使用錯誤信息字符串作爲參數
ex = Exception("密碼長度不夠")
#2.主動拋出異常
raise ex
#3.捕獲異常
try:
print(input_password())
except Exception as result:
print(result)