范围"提高"在Python 2和3中的嵌套异常处理程序中没有参数

时间:2015-02-24 14:39:51

标签: python python-2.7 exception python-3.x scope

考虑以下最小例子:

try:
  raise Exception('foo')
except Exception:
  try:
    raise Exception('bar')
  except Exception:
    pass
  raise 

使用Python 2运行此代码会引发异常栏,使用Python 3运行它会引发异常foo。然而,Python 2Python 3的文档指出raise没有表达式会引发"在当前范围内活动的最后一个异常"。为什么Python 2和3中的范围不同?差异记录在哪里吗?

1 个答案:

答案 0 :(得分:2)

范围不同,因为Python 3更先进。 :)

bar的范围以缩进的try开头,并在其except子句中的最后一个语句(或finally子句中有一个)之后结束;裸露的raise显然位于foo except节中,这就是重新加入的内容。

这是Python 3中修复的一些小问题。但是文档可能更清晰。