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

posted @ 2022-11-21 18:12  竹蜻蜓vYv  阅读(44)  评论(0编辑  收藏  举报