Python 使用Return语句执行奇怪的Try,但Else Finally行为除外
这是一些行为异常的代码。这是我所写行为的简化版本。这仍然会证明这种奇怪的行为,我有一些关于为什么会发生这种情况的具体问题 我正在Windows7上使用Python2.6.6Python 使用Return语句执行奇怪的Try,但Else Finally行为除外,python,try-except,Python,Try Except,这是一些行为异常的代码。这是我所写行为的简化版本。这仍然会证明这种奇怪的行为,我有一些关于为什么会发生这种情况的具体问题 我正在Windows7上使用Python2.6.6 def demo1(): try: raise RuntimeError,"To Force Issue" except: return 1 else: return 2 finally: return 3 def demo2(
def demo1():
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
def demo2():
try:
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
except:
print 4
else:
print 5
finally:
print 6
结果:
>>> print demo1()
3
>>> print demo2()
6
3
- 为什么演示一返回的是3而不是1
- 为什么演示2打印6而不是打印6 w/4或5
最终
语句是保证执行的(好吧,假设没有断电或Python控制之外的任何事情)。这意味着在函数返回之前,它必须运行finally块,该块返回不同的值
国家:
当在try…finally语句的try套件中执行return、break或continue语句时,finally子句也会“在退出时”执行
函数的返回值由最后执行的return语句确定。由于finally子句始终执行,因此finally子句中执行的return语句将始终是最后执行的语句:
这意味着,当您尝试返回时,将调用
finally
块,返回它的值,而不是您本来应该得到的值。执行顺序是:
但是,它被添加到样式指南中,因为它应该被避免。为什么在第二个示例中不打印5?我想这还没有得到很好的解释。返回一的答案很好,但是为什么第二个示例中的5没有打印出来呢?哦,我想我已经弄明白了,在最初的尝试中返回会导致它立即跳转到外部finally,因为
finally
块总是在运行。在演示2中,为什么它会执行嵌套finally,踢出到外部finally,然后返回嵌套finally以完成返回,而不是简单地从外部finally返回None?因为当调用return
语句时,Python会检查需要执行的任何openfinally
子句(请参见上面的引用)。