我想在某些情况下从函数返回时捕获异常:
def myfunc():
try:
a = 1
except:
pass
else:
if a == 1:
return a
finally:
return 100
x = myfunc()
print(x)
我对上面的代码的期望是
try
成功(无异常)else
满足条件的地方a
从函数返回,其余代码未运行可以想象,我得到的结果100
是,该finally
子句已经过评估。
由于我显然缺少了某些东西,因此我通过调试器运行了该程序,我确实到达了该return a
行,但实际上并没有在那一点返回。
finally
是始终执行。您返回的还不错,只是您误解了finally
套件的功能。
从try
声明文档中:
当
return
,break
或者continue
声明在执行try
一套一的try...finally
声明中,finally
子句也“的出路。”执行
在这种情况下,except
和else
处理程序try
仍然是套件的一部分。
该finally
套件是一个清理处理程序。进入try
套件后,finally
无论发生什么情况,都保证将被执行。这也意味着您可以更改返回的内容。明确记录了以下内容:
函数的返回值由最后
return
执行的语句确定。由于该finally
子句始终执行,因此在该子句中执行的一条return
语句finally
将始终是最后一条执行的语句:>>> >>> def foo(): ... try: ... return 'try' ... finally: ... return 'finally' ... >>> foo() 'finally'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句