在 Python 中,当局部变量在赋值之前被引用时,会发生 UnboundLocalError。与其他编程语言不同,Python 不需要显式变量声明。相反,变量在赋值时会绑定到值。
触发 UnboundLocalError 的一种方法是访问未赋值的变量:
>>> foobar Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foobar' is not defined
另一种方法是当赋值操作无法执行时,例如就像在条件块中一样:
def foo(): if False: spam = 'eggs' print(spam) >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in foo UnboundLocalError: local variable 'spam' referenced before assignment
在 Python 中,名称通过各种操作绑定到值:赋值、函数参数、导入语句、异常处理程序和上下文管理器。当名称绑定在函数作用域中时,它就成为局部变量。要访问函数内的全局变量,必须使用全局或非局部语句(在 Python 3 中)。
例如,以下函数尝试访问全局变量 foo 但失败,因为它绑定在函数内范围:
foo = None def bar(): if False: foo = 'spam' print(foo) >>> bar() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in bar UnboundLocalError: local variable 'foo' referenced before assignment
但是,使用全局 foo 解决了这个问题:
foo = None def bar(): global foo if False: foo = 'spam' print(foo) >>> bar() None
理解变量的概念绑定对于避免 Python 中的 UnboundLocalErrors 至关重要。
以上是为什么在 Python 中出现 UnboundLocalError?的详细内容。更多信息请关注PHP中文网其他相关文章!