如果try except else finally
都有返回值,会返回谁的值呢?参见下面各种情况。
如果try有返回值呢?
def f():
try:
print(1)
return 1
except:
print(2)
return 2
else:
print(3)
return 3
finally:
print(4)
return 4
输出:
1
4
4
答案是finally
的返回值。
finally
把前面的return都覆盖了。
如果有异常发生返回呢?
def f():
try:
print(1/0)
return 1
except:
print(2)
return 2
else:
print(3)
return 3
finally:
print(4)
return 4
print(f())
结果:
2
4
4
如果有else返回呢?
def f():
try:
print(1)
# return 1
except:
print(2)
return 2
else:
print(3)
return 3
finally:
print(4)
return 4
print(f())
结果:
1
3
4
4
总结
finally
会把前面的return
都覆盖了。
只有try正常执行,才会执行else,try有异常或return,都不会执行else。
建议把return放在函数最外面,或finally里,不然容易让finally里的return覆盖。
“如果try中没有异常,那么except部分将跳过,执行else中的语句。
finally是无论是否有异常,最后都要做的一些事情。”