UnbondLocalError: local variable referenced before assigment
来源:互联网 发布:怎么加盟淘宝网店 编辑:程序博客网 时间:2024/06/09 14:29
<span style="font-size:18px;"></span><pre name="code" class="python">y,z = 1,2def change(): y = y+2 z = z+2 retrun y,z
这段代码是想改变全局变量y,z的值,看起来没什么问题,y,z在函数外面声明了,实际运行起来会报 UnbondLocalError错。
这是因为python变量名解析原则:LEGB原则。当在函数中使用未认证的变量名时,python搜索4个作用域[本地作用域(L),之后是上一层结构中def或lambda的本地作用域(E),之后是全局作用域(G),最后是内置作用域(B)],并且在第一次能够找到这个变量名的地方停下来。
当给变量名‘y’赋值为‘y+2’时,python先在函数内部(即本地变量)中找'y+2'中的y是否在函数中定义了,然后才在全局变量中查找y的定义。当python先查找本地变量的时候,它找到了变量名y,但y却没有定义,故即便我们定义了全局变量y,依然会报错。有几种修改方法可避免这个错误。
(1)将y,z声明为全局变量
<span style="font-size:18px;">y,z = 1,2def change(): global y,z #加入这一行 y = y+2 z = z+2 retrun y,z</span>这样就不会再报错了,当赋值的时候,python查到了变量名y,但y是全局变量,不是本地变量,所以python在函数中没有查找到y的定义,所以它会从全局变量中查找y,这就得到了我们想要的结果
(2)将y,z的定义放在函数里面
def change(): y,z = 1,2 y = y+2 z = z+2 retrun y,z
python在函数内查找到了y,z的定义,就不会报错了。但是却没有改变y,z的值,当函数运行结束之后,y,z对象也就不存在了
0 0
- UnbondLocalError: local variable referenced before assigment
- local variable 'xxx' referenced before assignment
- Python - UnboundLocalError: local variable referenced before assignment
- UnboundLocalError: local variable 'l' referenced before assignment
- UnboundLocalError: local variable 'l' referenced before assignment
- local variable 'xxx' referenced before assignment
- UnboundLocalError: local variable ' ' referenced before assignment
- local variable 'a' referenced before assignment
- python - Local variable referenced before assignment
- local variable 'xxx' referenced before assignment
- local variable 'xxx' referenced before assignment
- local variable 'xxx' referenced before assignment
- UnboundLocalError: local variable 'XXX' referenced before assignment
- local variable XXX referenced before assignment
- 错误:local variable '' referenced before assignment
- UnboundLocalError: local variable 'sum1' referenced before assignment
- local variable 'msgMaxlen' referenced before assignment
- local variable 'bug_cnt' referenced before assignment
- Activity启动模式设置
- 【Unity特效】永恒战士3中的死亡特效
- Top 15 不起眼却有大作用的 .NET功能集
- Android网络通信篇:Socket TCP(简易聊天室)
- 服务自动化部署平台之Saltstack总结
- UnbondLocalError: local variable referenced before assigment
- Eval()时间格式化
- PowerShell 之 DNS Server (2)
- android 第三方recovery刷机
- java socket参数详解:BackLog
- 其他类型的标签
- JAVA中堆和栈的区别
- 【Java并发编程】之二:线程中断(含代码)
- iOS 画音频波形曲线 根据音频数据版