问题一:
def test_fun():
try:
print('before return')
return 'result'
finally:
print('after return')
print(test_fun())
输出:
before return
after return
result
可以看到先执行try中return之前的语句,然后执行finally中的语句,最后再执行try中的return。这就符合“return之后的语句都不会执行”的通常表述。
问题二:
def test_fun():
try:
print('before return')
return 'result'
finally:
print('after return')
return 'finally result'
print(test_fun())
输出:
before return
after return
finally result
可以看到如果finally中出现return,会拦截try中的return,先执行finally中return,然后结束函数调用,try中的return就没机会执行。