猿问

try-finally中的1个坑

在编写高质量代码-改善python程序的91个建议中有一个关于try-finally的一个问题如下:
defReturnTest(a):
try:
ifa<=0:
raiseValueError('datacannotbenegative')
else:
returna
exceptValueErrorase:
print(e)
finally:
print('theend')
return-1
ReturnTest(0)
ReturnTest(2)
给入参数为0时,输出结果可以解释通,输入参数为2时,就想不通了,书中解释说是在执行returna之前会先执行finally代码块,这是为何?
MMTTMM
浏览 342回答 2
2回答

慕桂英3389331

这是预期行为:不管发生什么,finally块总是会执行,即使你return也一样。PS:这本书好像是我读了开头就因为觉得质量太差而读不下去的那本呢。

萧十郎

try-except里面,当执行到try块中return语句的时候,会自动跳转到finally块中执行,当finally中的执行完后,再进入try中执行return,为此,我做了个测试:deftest():try:print(666)return1finally:print(777)>>>test()6667771从输出结果能看出刚刚的结论
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答