我们在学习python的时候都学过遇到return的时候无条件返回,以下的就不再执行。事实上是这样的吗?
我们做个试验
def func_1():
try:
return 1
print("finally没被执行")
finally:
print("finally被执行")
return 2
print(func_1())
以上函数正常情况下应该返回1,但实际上由于finally的特性,在try块return之前,会执行finally中的语句。
所以最终以上函数的结果是:
finally被执行
2
为什么不返回1呢,这是由于执行了finally块中的return,再看看我们上面说的第一句话,“我们在学习python的时候都学过遇到return的时候无条件返回”。所以try块中的return被忽略了
那么我们将上面的函数再修改一下,改成
def func_2():
try:
return 1
print("finally没被执行")
finally:
print("finally被执行")
print(func_2())
执行的结果是:
finally被执行
1
以上说明了在try块return执行之前,无论如何都会先执行finally中的块,如果finally中没有return,则返回执行try中的return。