文章目录
try… except结构
try…一个 except结构
try…except 是最常见的异常处理结构。结构如下:
try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块
try 块包含着可能引发异常的代码,except 块则用来捕捉和处理发生的异常。执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;执行的时候,如果 try块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;异常处理完后,继续执行后续代码。
#测试简单的 0 不能做除数异常
try:
print("step1")
a = 3/0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("step4")
如上的执行结果是:
step1
step3
division by zero
step4

执行结果:
step1
step2
step4
try 语句块没有发生异常,则正常执行完 try 块后跳过 except 异常处理语句块,继续往下执行。
【示例】循环输入数字,如果不是数字则处理异常;直到输入 88,则结束循环。
while True:
try:
x = int(input("请输入一个数字:"))
print("您入的数字是",x)
if x==88:
print("退出程序")
break
except:
print("异常:输入的不是一个数字")
执行结构:
请输入一个数字:34
您入的数字是 34
请输入一个数字:asd
异常:输入的不是一个数字
请输入一个数字:sd
异常:输入的不是一个数字
请输入一个数字:1
88
您入的数字是 1
请输入一个数字:您入的数字是 88
退出程序
try…多个 except结构
上面的结构可以捕获所有的异常,工作中也很常见。但是,从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加 BaseException。
结构如下:
try:
被监控的、可能引发异常的语句块
except Exception1:
处理 Exception1 的语句块
except Exception2:
处理 Exception2 的语句块
…
except BaseException:
处理可能遗漏的异常的语句块
【示例】多个 except 结构
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常:除数不能为 0")
except TypeError:
print("异常:除数和被除数都应该为数值类型")
except NameError:
print("异常:变量不存在")
except BaseException as e:
print(e)
print(type(e))
执行结构:
请输入被除数:3
请输入除数:5
0.6
请输入被除数:9
请输入除数:0
异常:除数不能为 0
try…except…else 结构
try…except…else 结构增加了“else 块”。如果 try 块中没有抛出异常,则执行 else 块。如果try 块中抛出异常,则执行 except 块,不执行 else 块。
【示例】try…except…else 结构执行测试
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
except BaseException as e:
print(e)
else:
print("除的结果是:",c)
print("程序结束!")
执行结果:
没有发生异常的执行情况(执行完 try 块后,执行 else):
请输入被除数:10
请输入除数:2
除的结果是: 5.0
程序结束!
发生异常的执行情况(执行 except 块,没有执行 else):
请输入被除数:5
请输入除数:0
float division by zero
程序结束!
try…except…finally 结构
try…except…finally 结构中,finally 块无论是否发生异常都会被执行;通常用来释放 try 块中申请的资源。
【示例】try…except…finally 结构简单测试
try:
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a)/float(b)
except BaseException as e:
print(e)
else:
print(c)
finally:
print("我是 finally 中的语句,无论发生异常与否,都执行!")
print("程序结束!")
执行结果:
请输入一个被除数:0
请输入一个除数:1
0.0
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!
当报错异常时:
请输入一个被除数:10
请输入一个除数:0
float division by zero
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!
【示例】读取文件,finally 中保证关闭文件资源
try:
f = open("d:/a.txt",'r')
content = f.readline()
print(content)
except BaseException as e:
print(e)
finally:
f.close() #释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
print("step4")
执行结果:
abcdef
step4

本文详细介绍了Python中的try...except异常处理结构,包括:try...一个except结构,try...多个except结构,try...except...else结构,以及try...except...finally结构,并通过示例代码解释了各种结构的使用场景和执行流程。
384

被折叠的 条评论
为什么被折叠?



