【发布时间】:2018-01-14 23:33:35
【问题描述】:
我在看this list of python quirks,很高兴这会返回False:
def t():
try:
return True
finally:
return False
看到这个后,我看到了here和here的答案,它们给出了原因,那就是finally子句将永远被执行,没有例外。
我的问题是,之前的return 值存储在哪里:
def t():
try:
return True
finally:
...
为什么这不返回None,而是返回原来的True?
是否可以通过编程方式访问要返回的值?
def t():
try:
return True
finally:
...
# if returning != None: return False
我想知道是否可以在不使用变量的情况下执行此操作,例如:
def t():
retval = None
try:
retval = "Set"
finally:
if retval != None:
return retval
else:
return "Not Set"
和
def t():
retval = None
try:
...
finally:
if retval != None:
return retval
else:
return "Not Set"
分别返回'Set'和'Not Set'。
【问题讨论】:
-
显然它存储在 somewhere 所以它可以在
finally:子句之后使用(假设它不包含return语句),但这是一个实现细节。