在python中赋值错误之前引用

referenced before assignment error in python

在python中,我得到了以下错误:

1
UnboundLocalError: local variable 'total' referenced before assignment

在文件的开头(在错误产生的函数之前),我使用global关键字声明"total"。然后,在程序主体中,在调用使用"total"的函数之前,我将其分配给0。我已经尝试在不同的地方将其设置为0(包括文件的顶部,声明之后),但我无法使其工作。有人看到我做错了什么吗?


我认为您使用"global"不正确。请参见python参考。您应该声明不带全局变量的变量,然后在函数内部,当您想要访问全局变量时,您应该声明它global yourvar

1
2
3
4
5
6
7
#!/usr/bin/python

total

def checkTotal():
    global total
    total = 0

请参见此示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python

total = 0

def doA():
    # not accessing global total
    total = 10

def doB():
    global total
    total = total + 1

def checkTotal():
    # global total - not required as global is required
    # only for assignment - thanks for comment Greg
    print total

def main():
    doA()
    doB()
    checkTotal()

if __name__ == '__main__':
    main()

因为doA()不修改全局合计,所以输出是1而不是11。


我的剧本

1
2
3
4
5
6
7
8
def example():
    cl = [0, 1]
    def inner():
        #cl = [1, 2] //access this way will throw `reference before assignment`
        cl[0] = 1
        cl[1] = 2   //these won't

    inner()