【发布时间】:2017-07-25 01:36:18
【问题描述】:
如何阻止 Python 删除名称绑定,当该名称是 用于绑定捕获的异常?这是什么时候发生的变化 行为进入 Python?
我正在编写在 Python 2 和 Python 3 上运行的代码:
exc = None
try:
1/0
text_template = "All fine!"
except ZeroDivisionError as exc:
text_template = "Got exception: {exc.__class__.__name__}"
print(text_template.format(exc=exc))
请注意,exc 在异常处理之前被显式绑定,因此 Python 知道它是外部范围内的名称。
在 Python 2.7 上,它运行良好,exc 名称仍然可以用于
format 调用::
Got exception: ZeroDivisionError
太好了,这正是我想要的:except 子句绑定了名称
我可以在函数的其余部分使用该名称来引用
异常对象。
在 Python 3.5 上,format 调用失败,因为显然 exc
绑定被删除::
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NameError: name 'exc' is not defined
为什么exc 绑定会从外部作用域中删除?我们是什么意思
可靠地保留名称绑定以使用它在except
子句?
此更改何时进入 Python,记录在哪里?
将其报告为 Python 3 中的错误是否正确?
【问题讨论】:
标签: python python-3.x namespaces