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

Scope for "raise" without arguments in nested exception handlers in Python 2 and 3

考虑以下最小示例:

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

运行 带有 Python 2 的代码引发异常 bar,运行 带有 Python 3 的代码引发异常 foo。然而,Python 2 and Python 3 的文档指出 raise 没有表达式将引发 "the last exception that was active in the current scope"。为什么 Python 2 和 3 中的范围不同?是否在任何地方记录了差异?

范围不同,因为 Python 3 更高级。 :)

bar 的范围以缩进的 try 开始,并在其 except 子句(或 finally 子句中的最后一个语句之后结束) ; raise 显然在 foo except 节中,这就是重新提出的内容。

这是 Python 3 中修复的那些小问题之一。不过,文档可能更清晰。