我们知道,清理操作是在执行try和except块之后执行。无论前面执行的是哪一块,都要去执行finally块的语句,有一个重点:finally块的语句在最后执行。
但是,如果前面两个块中,有return语句会怎么样?那样是不是就不能执行finally块中的语句?
看下面的程序。
def invert(x):
try:
return 1 / x
except ZeroDivisionError:
return 'error1'
finally:
print('invert(%s) done' % x)
例1:
>>> invert(21)
invert(21) done
0.047619047619047616
例2:
>>> invert(0)
invert(0) done
'error1'
从执行的结果来看,是先执行了finally块的语句,再去执行return语句。
也就是说,return语句,还是要在finallyf块之后执行。当然try和except块的其它语句,要在finally块之前执行。