首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3: UnboundLocalError:赋值前引用的局部变量

Python 3: UnboundLocalError:赋值前引用的局部变量
EN

Stack Overflow用户
提问于 2012-06-01 22:13:29
回答 3查看 886.4K关注 0票数 289

下面的代码给出了错误UnboundLocalError: local variable 'Var1' referenced before assignment

代码语言:javascript
复制
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()

我该如何解决这个问题呢?谢谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-01 22:15:32

您可以通过传递参数而不是依赖全局参数来修复此问题

代码语言:javascript
复制
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)
票数 93
EN

Stack Overflow用户

发布于 2012-06-01 22:19:55

如果在函数中设置变量的值,python会将其理解为使用该名称创建局部变量。此局部变量屏蔽全局变量。

在您的示例中,Var1被认为是一个局部变量,并且在设置之前使用它,因此出现了错误。

要解决这个问题,您可以通过将global Var1放入您的函数中来显式地说它是一个全局变量。

代码语言:javascript
复制
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()
票数 124
EN

Stack Overflow用户

发布于 2014-02-18 02:39:38

为什么不直接返回计算值,让调用者修改全局变量呢?在函数中操作全局变量不是一个好主意,如下所示:

代码语言:javascript
复制
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")
    return Var1 - 1

Var1 = function()

或者甚至制作全局变量的本地副本并使用它们,然后返回调用者可以适当分配的结果

代码语言:javascript
复制
def function():
v1, v2 = Var1, Var2
# calculate using the local variables v1 & v2
return v1 - 1

Var1 = function()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10851906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档