考虑以下最小例子:
try:
raise Exception('foo')
except Exception:
try:
raise Exception('bar')
except Exception:
pass
raise
使用Python 2运行此代码会引发异常栏,使用Python 3运行它会引发异常foo。然而,Python 2和Python 3的文档指出raise
没有表达式会引发"在当前范围内活动的最后一个异常"。为什么Python 2和3中的范围不同?差异记录在哪里吗?
答案 0 :(得分:2)
范围不同,因为Python 3更先进。 :)
bar
的范围以缩进的try
开头,并在其except
子句中的最后一个语句(或finally
子句中有一个)之后结束;裸露的raise
显然位于foo
except
节中,这就是重新加入的内容。
这是Python 3中修复的一些小问题。但是文档可能更清晰。