📜  UnboundLocalError:分配前引用的局部变量“msg” (1)

📅  最后修改于: 2023-12-03 15:20:49.174000             🧑  作者: Mango

UnboundLocalError: local variable 'msg' referenced before assignment

当在函数内引用一个本地变量之前没有为它分配一个值时,该错误“UnboundLocalError:分配前引用的局部变量”就会出现。

这个错误常常会让人感到困惑,因为在函数内部我们显式地分配了一个值给变量,但在后面的代码中,我们引用这个变量时却出现了错误。

原因

这个错误是由Python解释器的局部作用域规则引起的。

当在一个函数内部创建一个变量时,它被认为是一个本地变量。这个变量只能在该函数内被引用或修改。

在Python中,在函数内引用一个变量时,解释器会先在本地作用域中查找该变量,如果没有找到,它会在全局作用域中继续查找。如果还没有找到,它会在内置的命名空间中查找。

但是,如果你在函数里面给一个变量重新赋值之前,尝试去引用它,就会出现这个错误,因为该变量被认为是未定义的。

解决方案

要解决这个问题,我们需要先为变量赋一个值。

def print_msg():
    msg = 'Hello World'
    print(msg)   

在这个例子中,我们定义了一个变量 msg,并在函数内部先为它赋值。然后我们成功地打印了 msg 的值。

如果不定义 msg 的值,就会出现 UnboundLocalError 错误。

def print_msg():
    print(msg) 

print_msg() # UnboundLocalError: local variable 'msg' referenced before assignment

要避免这种错误,我们需要确保在函数内部引用本地变量之前,为其分配一个值。

总结
  • 当在函数内使用一个未被赋值的变量时,就会出现 UnboundLocalError 错误。
  • 解决这个错误的方法是在函数内部给变量赋一个值。
  • Python中的变量按照作用域规则搜索,如果在本地环境中找不到,则会搜索全局和内置环境。