Python 文档解释说,当局部变量在被分配名称之前被访问时,会发生 UnboundLocalError。价值。但是,它提到 Python 不强制执行声明。这就提出了一个问题:如果变量没有声明,如何才能“解除绑定”?
在 Python 中,变量绑定是通过赋值、循环、函数、导入发生的、异常处理和上下文管理。绑定决定变量的范围。如果名称绑定在函数或方法中,则该名称被视为本地名称,除非使用适当的语句显式标记为全局或非本地名称。
未绑定名称指的是在绑定之前已被引用的变量。这与尚未创建或分配的未定义名称不同。当遇到未绑定的名称时,Python 会引发 UnboundLocalError。
考虑以下代码:
def foo(): if False: spam = 'eggs' print(spam)
执行 foo() 将导致 UnboundLocalError 。 spam 变量在 print(spam) 中被引用,但从未被赋值。即使它是在 if 语句中定义的,该语句也不会被执行,因此垃圾邮件仍然是未绑定的。
要防止 UnboundLocalError,请确保在引用局部变量之前为其赋值。或者,使用 global 语句显式声明全局变量,或使用 nonlocal 语句显式声明非局部变量。
总之,当名称在当前范围内绑定之前被引用时,该名称将变为未绑定。发生这种情况是因为 Python 不需要变量声明,允许绑定操作发生在代码块内的任何位置。使用正确的分配和范围管理可以帮助避免 UnboundLocalError 异常。
以上是Python 中何时以及如何发生 UnboundLocalError?的详细内容。更多信息请关注PHP中文网其他相关文章!