在编写高质量代码-改善python程序的91个建议中有一个关于try-finally的一个问题如下:
def ReturnTest(a):
try:
if a <= 0:
raise ValueError('data can not be negative')
else:
return a
except ValueError as e:
print(e)
finally:
print('the end')
return -1
ReturnTest(0)
ReturnTest(2)
给入参数为0时,输出结果可以解释通,输入参数为2时,就想不通了,书中解释说是在执行return a之前会先执行finally代码块,这是为何?
3 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
这是预期行为:不管发生什么,finally 块总是会执行,即使你 return 也一样。
PS: 这本书好像是我读了开头就因为觉得质量太差而读不下去的那本呢。
当年话下
TA贡献1890条经验 获得超9个赞
try-except里面,当执行到try
块中return
语句的时候,会自动跳转到finally
块中执行,当finally
中的执行完后,再进入try
中执行return
, 为此,我做了个测试:
def test():
try:
print(666)
return 1
finally:
print(777)
>>> test()
666
777
1
从输出结果能看出刚刚的结论
添加回答
举报
0/150
提交
取消