我希望在捕获异常时在某些条件下从函数返回:
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
行,但实际上并没有返回。
答案 0 :(得分:6)
finally
始终已执行。你回来很好,只是你误解了finally
套件做什么。
来自try
statement documentation:
在
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'
答案 1 :(得分:1)
finally语句总是按照try语句文档执行。对于您的功能,您可能希望使用“else if”
def myfunc():
try:
a = 1
except:
pass
elif: a == 1:
return a
else:
return 100
x = myfunc()
print(x)