解决 local variable ‘xxx‘ referenced before assignment
在刷leetcode的时候,定义全局变量后在函数中调用总是会出现这个错误,一直没搞明白,现在记录一下
问题原因
- 变量声明之前未定义
如以下代码段:
def tmp():
print(a)
报错,只需声明一下即可解决
def tmp():
a = 1
print(a)
- 在函数中修改全局变量
a = 0
def tmp():
print(a)
a+=1
此时会报错,因为在tmp函数中修改了全局变量a的值,此时,只需加入global声明,即可解决
a = 0
def tmp():
global a
print(a)
a+=1
global和nonlocal的区别
但是,若在函数中声明变量,在函数的子函数中嵌套的修改全局变量,使用global也会报错,未找到变量xxx,因为在子函数中修改父函数声明的变量,需要使用nonlocal声明,如:
class A(self):
def tmp1():
a = 0
def tmp2():
global a
print(a)
a+=1
此时会报错,修改为:
class A(self):
def tmp1():
a = 0
def tmp2():
nonlocal a
print(a)
a+=1
成功运行