Python 中 finally 和 return 的交互
Python 中如果在 try 或 except 块中使用了 return,finally 块还会执行吗?finally 中的 return 会覆盖前面的 return 吗?
回答
屠龙少年
finally 块始终执行,即使在 try/except 中有 return、break、continue。
def test():
try:
return 'from try'
finally:
print('finally executes') # 始终打印
# return 'from finally' # 如果取消注释,覆盖 try 的 return
print(test())
# 输出:
# finally executes
# from try
关键规则:
finally中的return会覆盖 try/except 中的 returnfinally中的raise会覆盖 try/except 中的 return/raise- 如果
finally中没有 return/raise,原返回值保留
def test2():
try:
return 'try'
finally:
return 'finally' # 覆盖!
print(test2()) # 'finally'
最佳实践:不要在 finally 中使用 return 或 raise。