9.3.6 异常捕捉中的finally子句
捕捉异常语句的最后一个子句是finally。从这个子句的名字基本上可以判定是做什么用的。所有需要最后收尾的代码都要放到finally子句中。不管是正常执行,还是抛出异常,最后都会执行finally子句中代码,所以应该在finally子句中放置关闭资源的代码,如关闭文件、关闭数据库等。
如果使用return语句退出函数,那么首先执行finally自居中的代码,才会退出函数。因此并不用担心finally自居中的代码不会被执行,只要为try语句加上了finally子句,并且程序执行流程进入了try语句,finally自居中的代码是一定会执行的。
try:
...
except:
...
finally: # 无论是否抛出异常,都会执行finally子句中的代码
...
[例 9.7] 本例演示了finally子句在各种场景下的执行情况。
# 未抛出异常时执行finally子句中的代码
def fun1():
try:
print('fun1 正常执行')
finally:
print('fun1 finally')