8

我在追Apress, Beginning Python from Novice to Professional书。提到:

最后。如果需要确保执行某些代码(例如,清理代码),无论是否引发异常,都可以使用 try/finally。然后将此代码放在 finally 子句中。请注意,您不能在同一个 try 语句中同时包含 except 子句和 finally 子句——但您可以将一个放在另一个中。

我试过这段代码:

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

4 回答 4

14

这自 python 2.5 以来已得到修复,并在文档中明确指出

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

于 2011-09-23T05:41:05.353 回答
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'
于 2011-09-23T05:45:43.653 回答
1

恐怕那本书可能是错的,因为Python 文档使用了这三者。也许是时候买一本新书了?

于 2011-09-23T05:42:46.693 回答
0

在 python 2.4 之前,不允许 finally 与 except 或 else 语句组合。但是从 python 2.5 开始,像其他面向对象的编程语言一样,它支持组合 except 块和 finally 块。参考最新的python文档

于 2015-05-23T19:49:10.420 回答