先来一段代码:
def f(): try: return "123" finally: return "321" print(f())
执行结果会是什么呢?答案是:
prints:
321
可以看到如果在finally中使用return语句,则会屏蔽其他所有地方的return语句,始终被执行。
再来一段:
def f(): try: return "123" finally: print("321") print(f())
prints:
321
123
在try执行完后,会保存将要返回的信息,然后执行finally,最后再返回。
再来一段:
def f(): a = 1 try: return a+1 finally: a = a+2 print(f())
prints:
2
说明finally中不会对局部变量的值行进改变,或者说对将要返回的局部变量的值不会改变。
总结:finally在return前执行,在finally的操作,不会改变已经确定的return的值, finally不能加return语句。出现异常,先找是否有处理器可以处理这个异常有处理器可以处理这个异常,再finally。