一尘不染

Python 3:UnboundLocalError:分配前引用的局部变量

python

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

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()

我怎样才能解决这个问题?谢谢你的帮助!


阅读 826

收藏
2020-02-20

共2个答案

一尘不染

你可以通过传递参数而不是依赖全局变量来解决此问题

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)
2020-02-20
一尘不染

这是因为,即使Var1存在,你也要Var1在函数内部的名称上使用赋值语句(Var1 -= 1在底行)。自然地,这会在函数范围内创建一个变量(实际上,Var1a-=或+=只会更新(重新分配)现有变量,但是由于未知的原因(在这种情况下可能是一致性),Python会将其视为分配)。Python解释器会在模块加载时看到此情况,并(正确地)决定Var1不应该在局部作用域内使用全局作用域,这在你尝试在局部分配变量之前尝试引用该变量时会导致问题。

Python开发人员通常不赞成使用不必要的全局变量,因为这会导致混乱和有问题的代码。但是,如果你想使用它们来完成代码所隐含的含义,则只需添加:


global Var1, Var2

在函数顶部 这将告诉Python你无意在函数的本地范围内定义Var1或Var2变量。Python解释器会在模块加载时看到这一点,并决定(正确地)决定在全局范围内查找对上述变量的任何引用。

2020-02-20