5:finally结构
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("程序结束!")
运行结果:
"D:\Program Files\Python310\python.exe" D:\work\python\four\mypy07.py
请输入一个被除数:10
请输入一个除数:6
1.6666666666666667
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!
进程已结束,退出代码0
输出异常运行结果:
"D:\Program Files\Python310\python.exe" D:\work\python\four\mypy07.py
请输入一个被除数:10
请输入一个除数:a
could not convert string to float: 'a'
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!
【示例】读取文件,finally 中保证关闭文件资源
try:
f = open("d:/a.txt", 'r')
content = f.readline()
print(content)
except BaseException as e:
print(e)
finally:
try:
f.close() # 释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
except BaseException as e:
print(e)
print("step4")
输出结果:
"D:\Program Files\Python310\python.exe" D:\work\python\four\mypy08.py
1234567890-=
step4
发生异常的执行结果:
Traceback (most recent call last):
[Errno 2] No such file or directory: 'd:/a.txt'
File "C:/PycharmProjects/mypro_exception/my01.py", line 8, in <module>
f.close() #释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
NameError: name 'f' is not defined
Process finished with exit code 1