Python &引用;UnboundLocalError:局部变量;但变量是一个全局变量

Python &引用;UnboundLocalError:局部变量;但变量是一个全局变量,python,scope,global-variables,Python,Scope,Global Variables,我遵循了页面底部的队列示例。我想访问worker函数中的一些全局变量,但是,有些全局变量是可访问的,有些是不可访问的。在我下面的简单示例中,“rows”和“errors”变量是可访问的,但是我得到UnboundLocalError作为count。如果我把“全局计数”放进去,它就行了。但是我不明白为什么其他的环球都可以访问 File "myfile.py", line 184, in dpn_worker count += 1 UnboundLocalError: local variab

我遵循了页面底部的队列示例。我想访问worker函数中的一些全局变量,但是,有些全局变量是可访问的,有些是不可访问的。在我下面的简单示例中,“rows”和“errors”变量是可访问的,但是我得到UnboundLocalError作为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()

在这种情况下,由于count是一个整数:-

count += 1
相当于

count = count + 1
因此,您试图修改全局变量,但实际上正在创建一个局部变量。。但是在RHS上,您在初始化之前使用了局部变量

将您的dpn\U工作人员修改为:-

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

将问题标题粘贴到搜索框中会得到第一个结果。一点点研究真的那么难吗-1对不起,我一开始确实搜索过。我想这次我的google fu让我失望了。不,这并不完全相同。就地加法可以具有不同于“常规”加法的语义,并且在某些集合的情况下,具有不同于“常规”加法的语义。@delnan。。好啊它是否定义在某个地方,在什么条件下它们是不同的??实际上几天前我就开始用Python编码了。@RohitJain一个例子是列表,因为列表
+=
作为
extend()
lis=lis+somelis
实际上创建了一个新列表(
lis+somelis
),然后将其分配给LHS上的
lis
。@RohitJain,但它可以有其他名称,仍然包含原始列表。如果你做了
a=[1,2]
然后
b=a
,然后
a=a+[3]
a
将是
[1,2,3]
,而
b
将是
[1,2]
。如果你做了
a+=[3]
,那么两者都是
[1,2,3]
@AshwiniChaudhary。。是的,你说得对。。有很多东西要学,所以。。谢谢:)