Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法
2024-10-18 16:52:44
一、报错含义:
val=9
def test():
print(val)
val = 6
print(val)
test()
翻译:本地变量xxx引用前没有定义。
二、报错原因
这是Python变量作用域的问题的问题导致的:
- 内部函数,不修改全局变量可以访问全局变量
- 内部函数,修改同名全局变量,则python会认为它是一个局部变量
- 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError
val=9 #val现在是全局变量
def test():
print(val) #引用局部变量,但局部变量未在函数内定义,报局部变量未定义的error
val = 6 #函数内,修改了同名全局变量,则变量val会被认为是局部变量,所以在上一句“print(val)”引用该变量时,被认为是局部变量的val,又没有在引用前定义,所以Unbound-LocalError
print(val)
test()
三、解决方法
如果想在函数里修改同名全局变量的值之前引用该变量,就需要在函数内引用前用global关键字将被认为是局部的变量定义为全局变量。如下:
val=9
def test():
global val #将局部变量再次定义为全局变量
print(val) #可以直接引用全局变量
val = 6 #修改了同名全局变量,变量val会被认为是局部变量,但是在“print(val)”引用该变量之前,将变量又再次定义为全局变量,所以可能正确被引用,且修改的是全局同一个变量
print(val)
test()
print(val) #全局变量已在函数内被修改
打印结果:
9
6
6
如果只是想在函数内使用同名变量,而不改变函数外全局变量的值,则直接在函数内引用该变量前,初始化即可。如下:
val=9
def test():
val = 0 #定义局部变量val
print(val) #引用局部变量
val = 6 #修改局部变量,不会影响到全局变量的值
print(val) #引用局部变量
test()
print(val) #引用全局变量,不受函数内的局部变量影响
打印结果:
0
6
9
最新文章
- 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】
- 使用html和css的一些经验
- jQueryMobile控件之ListView
- ASP.NET 2.0 异步页面原理浅析 [1]
- 17) JMS: java Message Service(Java消息服务)
- html实现层叠加
- HDU-4675 GCD of Sequence 数学
- 一步步写STM32 OS【三】PendSV与堆栈操作
- (转)Spring 读书笔记-----使用Spring容器(一)
- ASP.NET项目中使用CKEditor +CKFinder 实现上传图片
- CC_CALLBACK之间的区别
- 【Java每日一题】20170308
- 谷歌广告Admob在cocos2dx上通过回调实现底部Banner
- MACD指标
- 关于Mysql5.7高版本group by新特性报错
- Java集合必会14问(精选面试题整理)
- Intel 82599网卡异常挂死原因
- appendChild简单表格的增删改查
- 使用fiddler抓手机包遇到问题
- 远程连接mysql root账号报错:2003-can't connect to MYSQL serve(转)