我正在关注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
段使用了finally
和try
,不是吗?并且代码可以正常工作。我无法理解这本书的内容!
有人请澄清。感谢。
答案 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文档