Python 为什么删除except中使用的变量
为什么删除Python 为什么删除except中使用的变量,python,python-3.x,Python,Python 3.x,为什么删除except语句中使用的变量?我的意思是: x = 0 try: x = 5/0 except ZeroDivisionError as x: pass print(x) 我得到name错误:没有定义名称“x”为什么?它不能像使用def或理解时那样工作吗?如果在封闭函数(或模块)中有一个与变量同名的变量,它只是被隐藏,但没有被删除?记录了该行为: 使用as target分配异常后,将在except子句末尾清除该异常 这意味着必须将异常分配给不同的名称,以便能够在excep
except
语句中使用的变量?我的意思是:
x = 0
try:
x = 5/0
except ZeroDivisionError as x:
pass
print(x)
我得到
name错误:没有定义名称“x”
为什么?它不能像使用def
或理解时那样工作吗?如果在封闭函数(或模块)中有一个与变量同名的变量,它只是被隐藏,但没有被删除?记录了该行为:
使用as target分配异常后,将在except子句末尾清除该异常
这意味着必须将异常分配给不同的名称,以便能够在except子句之后引用它。异常会被清除,因为通过附加到它们的回溯,它们与堆栈帧形成一个引用循环,使该帧中的所有局部变量保持活动状态,直到下一次垃圾回收发生
(我添加的括号中的部分)对此进行了解释:
当使用作为目标分配了异常时,
[即在您的情况下,作为x
)将在except子句末尾清除该异常。这就好像
翻译为:
这意味着必须将异常分配给另一个名称,以便能够在EXPECT子句之后引用它
原因也说明如下:
异常会被清除,因为通过附加到它们的回溯,它们与堆栈帧形成一个引用循环,使该帧中的所有局部变量保持活动状态,直到下一次垃圾回收发生
except E as N:
foo
except E as N:
try:
foo
finally:
del N