二、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文章
3826瀏覽量
82877 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86631
發(fā)布評(píng)論請(qǐng)先 登錄
FEM模擬中的python異常
如何使用Python檢測(cè)電動(dòng)機(jī)中的異常情況
python常見異常類型
python如何主動(dòng)拋出異常和捕獲異常
Cortex-M3的異常處理機(jī)制分析

C++異常機(jī)制探討

基于Python 異常的介紹以及異常處理的方法解析

Java中的異常處理機(jī)制
基于Greenshield模型的異常節(jié)點(diǎn)檢測(cè)機(jī)制
Python中有哪些常見的錯(cuò)誤和異常
python如何捕獲異常和主動(dòng)拋出異常
Python-模塊、包、異常

C++程序異常處理機(jī)制是什么

Python中的異常機(jī)制(一)

評(píng)論