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



考虑以下最小示例:

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

使用Python 2运行此代码会引发异常条,使用Python 3运行此代码则会引发异常foo。然而,Python 2和Python 3的文档都指出,没有表达式的raise将引发"当前范围中活动的最后一个异常"。为什么Python2和Python3的作用域不同?差异有记录吗?

作用域不同,因为Python 3更高级。:)

bar的作用域从缩进的try开始,在其except子句(如果有finally子句的话)中的最后一条语句之后结束;裸露的raise清楚地在foo except节中,这就是重新评价的内容。

这是Python 3中修复的一个小问题。不过,文件可能会更清晰。

最新更新