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

发布于 2021-02-02 23:14:47

以下代码给出了错误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()

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

关注者
0
被浏览
102
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

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

    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)
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

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

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

    
    global Var1, Var2
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看