一、異常
異常是指在語法正確的前提下,程序運行時報錯就是異常。 當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
二、異常捕獲
1.基本語法
語法格式 | 執行流程 |
---|---|
try: …代碼1…代碼2… …代碼3… except 異常類型: …處理異常代碼… | 程序從上往下執行,先執行try中 的代碼,如果代碼1報錯,則不會 執行代碼2和3,執行執行 exception中的異常代碼。 如果try中沒有報錯,則不執行 except中的代碼 |
try:
print("程序開始")
print(1/0)
print("程序結束")
except ZeroDivisionError:
print("程序有錯")
結果:
程序開始
程序有錯
- 捕獲多個異常 如果一段代碼中可能會觸發多個異常,我們可以寫一個try多個except來捕獲多個異常。
try:
a=[1,2]
print(1/0)
print(a[3])
except ZeroDivisionError:
print("被除數不能爲零")
except IndexError:
print("索引超出範圍")
結果:
被除數不能爲零
- 捕獲所有異常
a=[1,3,4,5,6,7,88]
b=iter(a)
while True:
try:
print(next(b))
except StopIteration as e:
print(e)
break
結果:
1
3
4
5
6
7
88
- 獲取異常信息描述
class A:
pass
x=10
print(A,x)
zd={"name":"張三"}
try:
print(zd["age"])
except KeyError as e:
print(e)
結果:
<class '__main__.A'> 10
'age'
- else格式
try:
print("haha")
print(1/0.3)
except Exception:
print("捕獲到了異常")
else:
print("沒有發生異常")
結果:
haha
3.3333333333333335
沒有發生異常
- try…finally格式
a=[1,2]
try:
print("x")
print("y")
print(a[3])
print(2/0)
except:
print(2)
else:
print(3)
finally:
print("無論異常產生與否都要執行")
結果:
x
y
2
無論異常產生與否都要執行
三、觸發異常 用戶可以根據業務邏輯手動的拋出異常。並且用戶可以根據需求來拋出系統異常(python已 經定義好的異常)和用戶自定義的異常。
- 拋出系統異常
格式 | 描述 |
---|---|
raise 異常類型(‘描述信息’) | 當程序執行到raise是,會自動的 觸發異常,讓程序結束 |
while True:
name=input("請輸入姓名,不能少於三個字")
try:
if len(name)<3:
raise Exception("姓名太少,請重新輸入")
else:
pwd=input("請輸入密碼")
print(name,pwd)
except Exception as e:
print(e)
結果:
請輸入姓名,不能少於三個字333
請輸入密碼222
333 222
請輸入姓名,不能少於三個字
- 拋出自定義異常
當程序中的異常類型不滿足時,我們可以自定義類型異常
class MyException(Exception):
def __init__(self,lenght,atlast):
self.lenght=lenght
self.atlast=atlast
def __str__(self):
return "您輸入的長度是{},至少輸入的長度是{}".format(self.lenght,self.atlast)
msg=input("請輸入長度大於5")
try:
if len(msg)<5:
raise MyException(len(msg),5)
except MyException as e:
print(e)
結果:
請輸入長度大於52
您輸入的長度是1,至少輸入的長度是5