在使用之前的代码时,报错:
Traceback (most recent call last):
…
File , line 1, in
js = js+1
UnboundLocalError: local variable ‘js’ referenced before assignment
Traceback (most recent call last):
...
File , line 1, in
js = js+1
UnboundLocalError: local variable 'js' referenced before assignment
截图如下:
主要报错信息内容翻译如下所示:
Traceback (most recent call last):
...
File , line 1, in
js = js+1
UnboundLocalError: local variable 'js' referenced before assignment
翻译:
回溯(最近一次调用最后一次):
...
js = js+1
中的文件 “”,第 1 行
UnboundLocalError:赋值前引用的局部变量“js”
...
js = 0
def main():
js = js+1
print(js)
...
经过查阅资料,发现是在函数内部更改全局变量就会出现此错误。
小伙伴们按下面的解决方法即可解决!!!
要解决这个错误,需要在函数内部声明全局变量。
正确的代码是:
...
js = 0
def main():
global js
js = js+1
print(js)
...
补充:一些关于全局变量和局部变量的知识。
全局变量:如上面的例子,在函数外部赋值的变量被称为全局变量(global variable)。
局部变量:定义在函数内部的变量称为局部变量(local variable),局部变量只在函数内部起作用。
局部变量的代码示例如下:
def main():
js= 3
print(js)
main() #输出结果为3
print(js) #出错,NameError: name 'js' is not defined提示js未定义
再举一个例子:
js= 4 #全局变量
def main():
js= 3 #局部变量
print(js)
main() #返回3,因为在函数内部局部变量a=3
print(js)#返回4,因为在函数外部全局变量a被赋值为4
可见,在函数内部访问变量(js)时,系统首先在函数内部找有没有定义局部变量(js),如果没有,就会在函数外部找有没有定义全局变量(js),如果都找不到才会报错。但是如果在函数外部访问变量(js),那么只会寻找全局变量(js),如果没有就会报错,而不管程序有没有在某个函数内部定义局部变量(js)。