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

8 投票
4 回答
4822 浏览
提问于 2025-04-17 02:54

我正在看一本叫《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

在这里,我在同一个 try 代码块中使用了 exceptfinally,对吧?而且代码运行得很好,跟我预期的一样。我有点搞不懂书里说的是什么意思!

有人能帮我解释一下吗?谢谢。

4 个回答

1

那本书可能有点问题,我担心是这样,因为Python的官方文档里用了三种方法。也许该换一本新书了?

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'
14

这个问题在Python 2.5版本就已经修复了,相关信息在文档中有明确说明。

换句话说,你的书是错误的或者过时了。

撰写回答