異常處理:
??????? 對(duì)出現(xiàn)的異常做出相應(yīng)處理
Python中的異常處理能力是很強(qiáng)大的,可向用戶準(zhǔn)確反饋出錯(cuò)信息。在Python中,異常也是對(duì)象,可對(duì)它進(jìn)行操作。所有異常都是基類Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模塊中定義。Python自動(dòng)將所有異常名稱放在內(nèi)建命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。一旦引發(fā)而且沒有捕捉SystemExit異常,程序執(zhí)行就會(huì)終止。如果交互式會(huì)話遇到一個(gè)未被捕捉的SystemExit異常,會(huì)話就會(huì)終止。
為什么要處理異常:
當(dāng)程序在運(yùn)行過程中,由于用戶的誤操作或者不合適的數(shù)據(jù)引發(fā)的程序錯(cuò)誤,讓代碼自己處理并保證程序的正常執(zhí)行。而不至于因?yàn)殄e(cuò)誤導(dǎo)致程序崩潰!
提高代碼的健壯性!
怎么處理異常:
???? 捕獲處理異常
語(yǔ)法:
?try:#嘗試,通常情況,將可能出現(xiàn)異常的代碼,包含在try中
<可能會(huì)出現(xiàn)異常的代碼>
except[異常信息]:#一旦出現(xiàn)異常,代碼就會(huì)直接從出現(xiàn)異常的地方跳轉(zhuǎn)到except中執(zhí)行
<出現(xiàn)異常之后要執(zhí)行的代碼>
else:#如果try中的代碼執(zhí)行沒有異常,執(zhí)行完畢后,就會(huì)執(zhí)行else中的代碼
<正常執(zhí)行try之后,else中的代碼執(zhí)行>
finally:?#不論是否出現(xiàn)異常,都要在try執(zhí)行完成之后執(zhí)行的代碼
<最終的掃尾工作>
案例:
"""
print("***************")
print("科學(xué)計(jì)算器")
print("***************")
num = input("請(qǐng)輸入第一個(gè)數(shù)據(jù):")
try:
nun_int = int(num)
except:
print("不好意思,你沒有按規(guī)定輸入")
else:
print("用戶輸入了第一個(gè)數(shù)據(jù):%s"%num)
"""
#捕獲具體異常
print("***************")
print("科學(xué)計(jì)算器")
print("***************")
num =input("請(qǐng)輸入第一個(gè)數(shù)據(jù):")
try:
nun_int =int(num)
exceptValueErrorase:
print("不好意思,你輸入了非法數(shù)據(jù):%s"%e)
else:
print("用戶輸入了第一個(gè)數(shù)據(jù):%s"%num)
自定義異常:
在Python中,要想引發(fā)異常,最簡(jiǎn)單的形式就是輸入關(guān)鍵字raise,后跟要引發(fā)的異常的名稱。異常名稱標(biāo)識(shí)出具體的類:Python異常是那些類的對(duì)象。執(zhí)行raise語(yǔ)句時(shí),Python會(huì)創(chuàng)建指定的異常類的一個(gè)對(duì)象。raise語(yǔ)句還可指定對(duì)異常對(duì)象進(jìn)行初始化的參數(shù)。為此,請(qǐng)?jiān)诋惓n惖拿Q后添加一個(gè)逗號(hào)以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個(gè)元組)。
案例:
#定義了一個(gè)輸入值的函數(shù):開發(fā)人員A開發(fā)的代碼
definputNumber():
try:
num =int(input("請(qǐng)輸入一個(gè)數(shù)值:"))
exceptValueError:#捕獲系統(tǒng)異常
raiseNumError()
else:
print("用戶輸入了:%d"%num)
returnnum
#開發(fā)人員B在開發(fā)你的代碼
#調(diào)用輸入值的方法
try:
num = inputNumber()
exceptNumErrorase:
print("出現(xiàn)了異常信息:%s"%e)
多異常:
我們經(jīng)常也會(huì)遇到多個(gè)異常出現(xiàn),對(duì)多異常處理的方法如下:
try-except (E1, E2, E3, …,En)ase一個(gè)except處理指定的多個(gè)異常
try-exceptE1-except?E2-except?E3…每個(gè)except處理指定的異常
案例1
try:
c =int(input("請(qǐng)輸入你的選擇:"))#ValueError
ifc ==1:
f =open("d:/text.txt")#FileNotFoundError
print(f.read())
f.close()
exceptValueErrorase:
print("選項(xiàng)輸入錯(cuò)誤:%s"%e)
exceptFileNotFoundErrorase:
print("文件讀取錯(cuò)誤:%s"% e)
exceptExceptionase:
print("程序出現(xiàn)未知錯(cuò)誤:%s"%e)
print("程序執(zhí)行完成!")
案例2:
try:
c = int(input("請(qǐng)輸入你的選擇:"))#ValueError
if c ==1:
f = open("d:/text.txt")#FileNotFoundError
print(f.read())
f.close()
except (ValueError,FileNotFoundError) as e:
print("程序出現(xiàn)錯(cuò)誤:%s"%e)
print("程序執(zhí)行完成!")