" UnboundLocalError:局部变量"但变量是全局变量

时间:2012-10-04 17:09:39

标签: python scope global-variables

我在Python Queue页面底部跟踪了一个队列示例。我想访问worker函数中的一些全局变量,但是,有些全局变量是可访问的,有些则不是。在我下面的简单示例中,'rows'和'errors'变量是可访问的,但是我得到UnboundLocalError for count。如果我把“全球计数”,那么它的工作原理。但我不明白为什么其他全局变量可以访问。

File "myfile.py", line 184, in dpn_worker
    count += 1
UnboundLocalError: local variable 'count' referenced before assignment

以下是我使用的代码示例:

dpns = [1,2,3,4]
q = Queue.Queue()
rows = []
errors = []
count = 0

def dpn_worker():
    while True:
        item = q.get()
        rows.append(1)
        errors.append(1)
        count += 1
        q.task_done()

def main():
    for d in dpns:
        q.put(d)

    for i in range(NUM_WORKERS):
        t = threading.Thread(target=dpn_worker)
        t.daemon = True
        t.start()

    q.join()

1 个答案:

答案 0 :(得分:2)

在这种情况下,因为count是一个整数: -

count += 1

相当于

count = count + 1

所以,你试图修改全局变量,但实际上是创建一个本地变量..但是在RHS上,你在初始化之前使用局部变量。

dpn_worker 修改为: -

def dpn_worker():
    global count
    while True:
        item = q.get()
        rows.append(1)
        errors.append(1)
        count += 1
        q.task_done()