经典代码(同样适用于Java、JavaScript):
def lol(): try: return True finally: return False
调用lol()
后,究竟是返回False
还是True
呢?相信你和我一样,最开始认为是True
,因为try
中的语句先执行,对吧?
但事实上:
>>> lol()
False
try
had a try. Finally, finally
won.
所以,不要在异常语句中用return……
经典代码(同样适用于Java、JavaScript):
def lol(): try: return True finally: return False
调用lol()
后,究竟是返回False
还是True
呢?相信你和我一样,最开始认为是True
,因为try
中的语句先执行,对吧?
但事实上:
>>> lol()
False
try
had a try. Finally, finally
won.
所以,不要在异常语句中用return……
| Theme: Aeros 2.0 by TheBuckmaker.com
2011年12月26日 14:46
finally优先于try中的return语句执行,所以finally中,如果有return,则会直接返回,而不是调用try中的return;catch中的return也是一样,也就是说,在return之前,肯定会先调用finally中的return。
2011年12月26日 20:38
@tolbKni: 不是try后面的先执行么?
>>> try:
... print("hi")
... finally:
... print("lo")
...
hi
lo
2011年12月26日 20:38
OO 诶,代码显示得好奇怪。
2011年12月26日 20:45
@cuihao: return 语句需要特殊对待
2012年1月03日 22:17
@cuihao: try 里边遇到 return 了。解释器准备返回了!finally 赶紧跳出来喊:喂,你还没按规矩执行我呢?于是解释器就去执行 finally 里的 return 了。再然后,函数返回,就没有然后了。
2012年1月04日 22:14
@依云: 那么 catch 语句块如何解释?
2012年1月04日 22:24
@tolbkni: 也一样啊,不管是 try 还是 except 部分,都不能绕过 finally 的。