"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 中修复的那些小问题之一。不过,文档可能更清晰。
考虑以下最小示例:
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 中修复的那些小问题之一。不过,文档可能更清晰。