一、異常的概念
程序運行時,如果Python解釋器遇到一個錯誤,會停止程序的執行并且提示一些錯誤信息,這就是****異常****。
程序停止執行并且提示錯誤信息這個動作,我們通常稱之為:****拋出異常****。
程序開發時,很難把所有的特殊情況都處理的面面俱到,通過異常捕獲可以針對突發事件做集中的處理,從而保證程序的穩定性和健壯性。(健壯:可以理解為功能強大)
二、捕獲異常
2.1)簡單的捕獲異常語法
在程序開發中,如果****對某些代碼的執行不確定是否正確****,可以增加try來****捕獲異常。****
2.1.1捕獲異常最簡單的語法格式:
try:
嘗試執行的代碼
except:
出現錯誤的處理
- ****try****:****嘗試。****下方編寫要嘗試的代碼,不確定是否能正常執行的代碼
- ****except****:****如果不是。****下方編寫嘗試失敗的代碼
2.1.2簡單異常捕獲演練:
****需求:****要求用戶輸入整數
代碼:
try:
# 不能確定是否正確的執行代碼
num = int(input("請輸入一個整數:"))
except:
# 錯誤的處理代碼
print("請輸入正確的整數")
print("+" * 30)
執行結果:當輸入數字正確
執行結果:當輸入數字不正確
2.2)錯誤類型捕獲
在程序執行時,可能會遇到不同類型的異常,并且需要針對不同類型的異常做出不同的響應,這個時候就需要捕獲錯誤類型了。
當Python解釋器拋出異常時,最后一行錯誤信息的第一個單詞就是****錯誤類型。****
如圖:
2.2.1語法:
try:
# 嘗試執行的代碼
pass
except 錯誤類型1:
# 針對錯誤類型1,做出對應的代碼處理
pass
except (錯誤類型2, 錯誤類型3):
# 針對錯誤類型2和3,做出對應的代碼處理
pass
except Exception as result:
print("未知錯誤 %s" % result)
2.2.2異常類型捕獲演練:
****需求:****
- 提示用戶輸入一個整數
- 使用8除以用戶輸入的幀數并輸出
代碼:
# 1.提示用戶輸入一個整數
num = int(input("輸入一個整數"))
# 2.使用8除以用戶輸入的幀數并輸出
result = 8 / num
print(result)
****輸入不同,錯誤提示不同:****
1.輸入字母,提示信息:值錯誤的異常
2.輸入數字0,因為分母不能為0,提示信息:除0錯誤異常
****針對兩種不同錯誤類型分別給用戶不同提示的代碼:****
try:
# 1.提示用戶輸入一個整數
num = int(input("輸入一個整數"))
# 2.使用8除以用戶輸入的幀數并輸出
result = 8 / num
print(result)
except ValueError:
print("請輸入正確的整數")
except ZeroDivisionError:
print("除0錯誤")
執行結果:
2.2.3 捕獲未知錯誤
在開發時,要預判到所有可能出現的錯誤還是有一定難度的,如果希望程序無論出現任何錯誤,都不會因為python解釋器拋出異常而被終止,可以再增加一個except。
****語法:****
except Exception as result:
print("未知錯誤 %s" % result)
- Exception是python針對異常提供的類
- as是一個關鍵字
- result是一個變量名,可以任意修改,,通過這個result就可以訪問到被捕獲的未知異常
****代碼體驗:注釋掉除0錯誤,輸入0看看是什么提示信息****
try:
# 1.提示用戶輸入一個整數
num = int(input("輸入一個整數"))
# 2.使用8除以用戶輸入的幀數并輸出
result = 8 / num
print(result)
except ValueError:
print("請輸入正確的整數")
# except ZeroDivisionError:
# print("除0錯誤")
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:
# 1.提示用戶輸入一個整數
num = int(input("輸入一個整數"))
# 2.使用8除以用戶輸入的幀數并輸出
result = 8 / num
print(result)
except ValueError:
print("請輸入正確的整數")
# except ZeroDivisionError:
# print("除0錯誤")
except Exception as result:
print("未知錯誤 %s" % result)
else:
print("嘗試成功")
finally:
print("無論是否有異常都會執行的代碼")
print("+" * 30)
輸入不同數據執行結果:
分享一個網站:python自學網 ,包含web開發、爬蟲、自動化運維/測試、GUI界面開發等,視頻+文章教程供大家學習,小白也不用擔心python方面學習路線和學習方法