python报UnboundLocalError是为什么?
举个栗子:
>>> x = 10>>> def bar():... print(x)>>> bar()10作品,但这个代码:
>>>>>> x = 10>>> def foo():... print(x)... x += 1导致UnboundLocalError:
>>>>>> foo()Traceback (most recent call last): ...UnboundLocalError: local variable 'x' referenced before assignment这是因为,当您对作用域中的变量进行赋值时,该变量将变为该作用域的局部变量,并在外部作用域中对任何具有相似名称的变量进行遮蔽。由于foo中的最后一个语句赋予一个新值 ,因此编译器将其识别为局部变量。因此,当早期尝试打印未初始化的局部变量并产生错误时。
在上面的例子中,你可以通过声明它是全局的来访问外部范围变量:
>>>>>> x = 10>>> def foobar():... global x... print(x)... x += 1>>> foobar()10这个显式声明是为了提醒你(不同于类和实例变量的表面上类似的情况),你实际上是在修改外部变量的值:
>>>>>> print(x)11您可以使用 关键字在嵌套范围内做类似的事情:
>>>>>> def foo():... x = 10... def bar():... nonlocal x... print(x)... x += 1... bar()... print(x)>>> foo()1011Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有