2010-08-02 201 views
9

我在博客今天发现了这个有趣的项目:这是为什么这样做呢?

def abc(): 
    try: 
     return True 
    finally: 
     return False 

print "abc() is", abc() 

谁能告诉它为什么它做什么?

感谢, KR

+0

尽管不完全一样,但可以在这里找到 的一个很好的讨论:http://stackoverflow.com/questions/1611561/python-error-handling-with-try-finally – dave 2010-08-02 17:47:28

+0

-1:did甚至没有尝试查看http://docs.python.org/reference/compound_stmts.html#the-try-statement – 2010-08-02 18:51:10

回答

10

如果finally块包含returnbreak语句从结果尝试 块被丢弃

它的详细解释在python docu

+0

aww中的finally语句,你击败了我:) – 2010-08-02 17:50:43

0

感谢您指向文档的指针。我无法超越'回归真实'甚至想到那里。的文档的

部分读取:

如果最后存在时,它指定一个 “清理”处理程序。 try子句被执行, ...

这表明返回True执行。然而,这是后来澄清:

当一回,打破或继续 语句在try套房一试... finally语句的执行 的 终于子句也 的方式执行” out'。

这解释了观察到的行为。

什么样的想法会首先想到这样的代码? ;)