解决:UnboundLocalError: local variable ‘js’ referenced before assignment
文章目录
- 解决: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
截图如下:
报错翻译
主要报错信息内容翻译如下所示:
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 jsjs = js+1 print(js)
...
补充:一些关于全局变量和局部变量的知识。
全局变量:如上面的例子,在函数外部赋值的变量被称为全局变量(global variable)。
局部变量:定义在函数内部的变量称为局部变量(local variable),局部变量只在函数内部起作用。
局部变量的代码示例如下:
def main():js= 3print(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)。