为什么出现Unbound Local错误,我应该在哪里出现NameError?

时间:2019-02-16 04:29:33

标签: python-3.x

当我删除变量并在函数内部访问它时,unboundLocalError出现在哪里,好像在函数NameError之外引发了同样的事情。我无法理解为什么访问被删除的变量的行为不一致?

def func():
    x=10
    del x
    print(x)
func() #this will cause UnboundLocal Error

#But if i copy the same code and execute it without using the function call then NameError shows up

x=10
del x
print(x) #this will raise NameError as x does not exist

在我这两种情况下,在删除变量后尝试访问变量时,都应引发NameError。

1 个答案:

答案 0 :(得分:1)

  

在对函数或方法中的局部变量进行引用但未将值绑定到该变量时引发。这是NameError的子类。

https://docs.python.org/3/library/exceptions.html?highlight=unboundlocalerror

差异似乎纯粹是位置之一。 UnboundLocalError扩展了NameError,并且在方法/函数内部发生错误时选择UnboundLocalError作为错误。

这可能不会解决一个单独的问题:“为什么python开发人员决定这样做呢?”但这确实解释了为什么看到它。