二、try和except結(jié)構(gòu)
try...一個(gè)except結(jié)構(gòu)
這種結(jié)構(gòu)是最常見, 也是最常用的結(jié)構(gòu)
語(yǔ)法結(jié)構(gòu)
try:
被監(jiān)控的可能引發(fā)異常的語(yǔ)句塊
exceptBaseException[ase]:
異常處理語(yǔ)句塊
注意事項(xiàng):
- try 塊包含著可能引發(fā)異常的代碼, except 塊則用來(lái)捕捉和處理發(fā)生的異常
- 執(zhí)行的時(shí)候,如果 try 塊中沒(méi)有引發(fā)異常,則跳過(guò) ecept 塊繼續(xù)執(zhí)行后續(xù)代碼
- 執(zhí)行的時(shí)候,如果 try 塊中發(fā)生了異常,則跳過(guò) try 塊中的后續(xù)代碼,跳到相應(yīng)的 except 塊中處理異常. 異常處理完后,繼續(xù)執(zhí)行后續(xù)代碼
實(shí)操代碼
defa():
print("runina()start!")
try:
num=1/0
exceptBaseExceptionase:
print("捕獲異常之后執(zhí)行此處代碼")
print("runina()end!")
defb():
print("runinb()start!")
a()
print("runinb()end!")
defc():
print("runinc()start!")
b()
print("runinc()end!")
print("step1")
c()
print("step2")
try...多個(gè)except結(jié)構(gòu)
try...except 的結(jié)構(gòu)可以捕獲所有的異常,工作中也很常見. 但是,一般建議盡量捕獲可能出現(xiàn)的多個(gè)異常(按照先子類后父類的順序),并且針對(duì)性寫出異常處理代碼 為了避免遺漏可能出現(xiàn)的異常,可以在最后增加 BaseException 。結(jié)構(gòu)如下
語(yǔ)法結(jié)構(gòu)
try:
被監(jiān)控的、可能引發(fā)異常的語(yǔ)句塊
exceptException1:
處理Exception1的語(yǔ)句塊
exceptException2:
處理Exception2的語(yǔ)句塊
[...]
except BaseException:
處理可能遺漏的異常的語(yǔ)句塊
實(shí)操代碼
try:
a=input("請(qǐng)輸入被除數(shù):")
b=input("請(qǐng)輸入除數(shù):")
result=float(a)/float(b)
print(result)
exceptZeroDivisionError:
print("異常:0不能做除數(shù)")
exceptValueError:
print("異常:輸入的必須是數(shù)值類型!")
exceptBaseExceptionase:
print(e)
print(type(e))
try...except...else結(jié)構(gòu)
在 try...except...else 結(jié)構(gòu)的基礎(chǔ)上增加了 else 塊 .如果 try 塊中沒(méi)有拋出異常,則執(zhí)行else 塊. 如果 try 塊中拋出異常,則執(zhí)行 except 塊,不執(zhí)行 else 塊.
語(yǔ)法結(jié)構(gòu)
try:
被監(jiān)控的可能引發(fā)異常的語(yǔ)句塊
exceptBaseException[ase]:
異常處理語(yǔ)句塊
else:
沒(méi)有拋出異常時(shí)執(zhí)行的語(yǔ)句塊
實(shí)操代碼
try:
a=input("請(qǐng)輸入被除數(shù):")
b=input("請(qǐng)輸入除數(shù):")
result=float(a)/float(b)
exceptBaseExceptionase:
print(e)
else:
print("兩數(shù)相除,結(jié)果是:",result)
try...except...finally結(jié)構(gòu)
try...except...finally 結(jié)構(gòu)中, finally 塊無(wú)論是否發(fā)生異常都會(huì)被執(zhí)行, 通常用來(lái)釋放 try 塊中申請(qǐng)的資源
語(yǔ)法結(jié)構(gòu)
try:
被監(jiān)控的可能引發(fā)異常的語(yǔ)句塊
exceptBaseException[ase]:
異常處理語(yǔ)句塊
finally:
無(wú)論是否捕獲異常都會(huì)執(zhí)行的語(yǔ)句塊
實(shí)操代碼
try:
a=input("請(qǐng)輸入被除數(shù):")
b=input("請(qǐng)輸入除數(shù):")
result=float(a)/float(b)
exceptBaseExceptionase:
print(e)
else:
print("兩數(shù)相除,結(jié)果是:",result)
finally:
print("我是finally中的語(yǔ)句, 無(wú)論發(fā)生異常與否, 都執(zhí)行!")
實(shí)操代碼2
try:
f=open("d:/a.txt",'r')
print(content)
exceptBaseExceptionase:
print(e)
finally:
f.close()#釋放資源. 此處也可能會(huì)發(fā)生異常。若發(fā)生異常,則程序終止,不會(huì)繼續(xù)往下執(zhí)行
print("step4")
-
程序
+關(guān)注
關(guān)注
117文章
3792瀏覽量
81163 -
python
+關(guān)注
關(guān)注
56文章
4799瀏覽量
84817
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論