python当变量有值时,为什么会出现UnboundLocalError?
通过在函数体中的某处添加赋值语句,导致以前正常工作的代码被修改而得到 UnboundLocalError 会令人感到意外。
以下代码:
>>> x=10>>> defbar():
... print(x)
>>> bar()
10
正常工作,但是以下代码
>>> x=10>>> deffoo():
... print(x)
... x+=1
会得到一个 UnboundLocalError :
>>> foo()Traceback (most recent call last):
...
UnboundLocalError: local variable "x" referenced before assignment
这是因为当你对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。由于foo中的最后一个语句为 x
分配了一个新值,编译器会将其识别为局部变量。因此,当先前的 print(x)
尝试打印未初始化的局部变量时会导致错误。
在上面的示例中,你可以通过将其声明为全局来访问外部作用域变量:
>>> x=10>>> deffoobar():
... globalx
... print(x)
... x+=1
>>> foobar()
10
这个显式声明是必需的,以便提醒你(与类和实例变量的表面类似情况不同),你实际上是在外部作用域中修改变量的值
>>> print(x)11
你可以使用 nonlocal
关键字在嵌套作用域中执行类似的操作:
>>> deffoo():... x=10
... defbar():
... nonlocalx
... print(x)
... x+=1
... bar()
... print(x)
>>> foo()
10
11
以上是 python当变量有值时,为什么会出现UnboundLocalError? 的全部内容, 来源链接: utcz.com/z/520561.html