设为首页
收藏本站
切换到宽版
登录
注册
找回密码
搜索
搜索
本版
文章
帖子
用户
快捷导航
易学开发平台
易学在线课堂
易学智能论坛
BBS
易学智能
»
易学智能论坛
›
技术大讨论
›
Python开发
›
Python 3: UnboundLocalError: local variable referenc ...
返回列表
查看:
2366
|
回复:
3
Python 3: UnboundLocalError: local variable referenced before assignmentPytho...
[复制链接]
社会诚哥
社会诚哥
当前离线
积分
39
4
主题
11
帖子
39
积分
新手上路
新手上路, 积分 39, 距离下一级还需 11 积分
新手上路, 积分 39, 距离下一级还需 11 积分
积分
39
发消息
发表于 2018-9-18 17:34:13
|
显示全部楼层
|
阅读模式
运行以下代码
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
复制代码
给出了错误
UnboundLocalError: local variable 'Var1' referenced before assignment:
复制代码
我怎样才能解决这个问题?谢谢你的帮助!
回复
使用道具
举报
强人锁男
强人锁男
当前离线
积分
199
11
主题
80
帖子
199
积分
注册会员
注册会员, 积分 199, 距离下一级还需 1 积分
注册会员, 积分 199, 距离下一级还需 1 积分
积分
199
发消息
发表于 2018-9-18 17:35:23
|
显示全部楼层
可以通过传递参数而不是依赖Globals来解决此问题
def function(Var1, Var2):
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
return Var1 - 1
function(1, 1)
复制代码
回复
使用道具
举报
令狐少侠
令狐少侠
当前离线
积分
180
10
主题
72
帖子
180
积分
注册会员
注册会员, 积分 180, 距离下一级还需 20 积分
注册会员, 积分 180, 距离下一级还需 20 积分
积分
180
发消息
发表于 2018-9-18 17:37:02
|
显示全部楼层
这是因为,即使Var1存在,你也在Var1函数内部的名称上使用赋值语句(Var1 -= 1在底行)。当然,这会在函数的范围内创建一个变量(实际上,Var1a -=或+=只会更新(重新分配)现有变量,但由于原因未知(可能是此上下文中的一致性),Python会将其视为赋值)。Python解释器在模块加载时看到这一点,并决定(正确地说)全局作用域Var1不应在本地作用域内使用,这会在您尝试在本地分配之前引用该变量时导致问题。
Python开发人员通常不赞成使用全局变量,因为它会导致令人困惑和有问题的代码。但是,如果你想使用它们来完成代码所暗示的内容,你只需添加:
global Var1, Var2
在你的功能顶部。这将告诉Python您不打算在函数的本地范围内定义Var1或Var2变量。Python解释器在模块加载时看到这一点并决定(正确地)以查找对全局范围中的上述变量的任何引用。
一些资源
• Python网站对这个常见问题有很好的解释。
• Python 3提供了一个相关的nonlocal声明 - 也可以检查一下。
回复
使用道具
举报
令狐少侠
令狐少侠
当前离线
积分
180
10
主题
72
帖子
180
积分
注册会员
注册会员, 积分 180, 距离下一级还需 20 积分
注册会员, 积分 180, 距离下一级还需 20 积分
积分
180
发消息
发表于 2018-9-18 17:37:42
|
显示全部楼层
如果在函数内部设置变量的值,python会将其理解为使用该名称创建局部变量。此局部变量屏蔽全局变量。
在您的情况下,Var1被视为一个局部变量,它在被设置之前使用,因此错误。
要解决这个问题,你可以通过global Var1输入函数明确地说它是全局的。
Var1 = 1
Var2 = 0
def function():
global Var1
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
复制代码
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表