我在python中遇到了一个奇怪的行为。我在python帮助或SE上找不到关于此的信息,因此这里是:
def divide(x, y):
print 'entering divide'
try:
return x/y
except:
print 'error'
else:
print 'no error'
finally:
print 'exit'
print divide(1, 1)
print divide(1, 0)
输出:
entering divide
exit
1
entering divide
error
exit
None
如果在try
中返回值,python似乎不会进入else
块。但是,它将始终位于finally
块中。我真的不明白为什么。有人能帮我讲一下这个逻辑吗?
谢谢
这种行为的原因是
return
内部的try
。当发生异常时,
finally
和except
块都在return
之前执行。在没有异常发生的相反情况下,else
运行,except
不运行按预期工作:
http://docs.python.org/reference/compound_stmts.html#the-try-statement
未执行
else
块,因为在函数有机会执行之前,您已经离开了它。但是,总是执行
finally
块(除非您拉断电源线或类似的东西)。考虑这个(作为一个思想实验;请不要在实际代码中这样做):
查看它返回的内容:
如果你感到困惑,你并不孤单。有些语言,比如C,会主动阻止您在
finally
子句中放置return
语句。相关问题 更多 >
编程相关推荐