Python中出现意外的名称错误 >e='e' >>>e “e” >>>try:引发异常 例外情况除外,如e: e='e' a='a' >>>e 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 E NameError:未定义名称“e” >>>a “a”
我以前没有注意到这种行为。为什么将变量用作try-except别名会使其丢失以前的定义?当使用as-target分配了异常时,它会在except子句的末尾被清除。在这种情况下:Python中出现意外的名称错误 >e='e' >>>e “e” >>>try:引发异常 例外情况除外,如e: e='e' a='a' >>>e 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 E NameError:未定义名称“e” >>>a “a”,python,variables,exception,nameerror,try-except,Python,Variables,Exception,Nameerror,Try Except,我以前没有注意到这种行为。为什么将变量用作try-except别名会使其丢失以前的定义?当使用as-target分配了异常时,它会在except子句的末尾被清除。在这种情况下: >>> e = 'e' >>> e 'e' >>> try: raise Exception except Exception as e: e = 'e' a = 'a' >>> e Traceback (most recent c
>>> e = 'e'
>>> e
'e'
>>> try: raise Exception
except Exception as e:
e = 'e'
a = 'a'
>>> e
Traceback (most recent call last):
File "<pyshell#333>", line 1, in <module>
e
NameError: name 'e' is not defined
>>> a
'a'
翻译成
except Exception as e:
e = 'e'
a = 'a'
因此,如果我们试图访问
e
,它将给出一个错误。这是一个奇怪的副作用尝试
/除了
(如如果
/否则
)不创建新名称空间,因此那里的e
肯定会消灭你的全局e
。除了之外,它在之后蒸发的事实只是稍微令人惊讶,@SuperStormer我认为它确实如此
except Exception as e:
try:
e = 'e'
a = 'a'
finally:
del e