Try-Except-Finally语句的过时书籍描述

时间:2011-09-23 05:37:18

标签: python exception python-2.x python-2.5

我正在关注Apress, Beginning Python from Novice to Professional本书。提到:

  

最后。如果你需要确保一些,你可以使用try / finally   无论是否执行代码(例如,清理代码)   是否提出异常。然后将此代码放入finally中   条款。请注意,您不能同时拥有except子句和finally子句   在同一个try语句中的子句 - 但是你可以将一个放在另一个中。

我试过这段代码:

def someFunction():
    a = None
    try:
        a = 1 / 0
    except ZeroDivisionError, e:
        print 'Yesss'
        print e
    finally:
        print 'Cleanup'
        del a

if __name__ == '__main__':
    someFunction()

...输出

Yesss
integer division or modulo by zero
Cleanup

在这里,我在同一except段使用了finallytry,不是吗?并且代码可以正常工作。我无法理解这本书的内容!

有人请澄清。感谢。

4 个答案:

答案 0 :(得分:14)

自python 2.5以来,这已得到修复,并在documentation

中清楚地注明

换句话说,您的图书不正确/已过期

答案 1 :(得分:6)

我相信这本书实际上就是这个例子,因此我完全不知道他的意思。正如之前的回答所指出的,这在python 2.5中已经改变了,所以

try:
    try:
        print 'something'
    except:
        print 'some weird error'
finally:
    print 'finally something

相当于

try:
    print 'something'
except:
    print 'some weird error'
finally:
    print 'finally'

答案 2 :(得分:1)

这本书可能是错的,我担心,因为Python documentation使用这三本书。也许是时候买一本新书?

答案 3 :(得分:0)

直到python 2.4,才允许最终与except或else语句组合。 但是从python 2.5开始,就像其他面向对象的编程语言一样,它支持除块和finally块之外的组合。 请参阅最新的python文档