正如在這裏提到的其他答案,問題不在於你的線程。這是因爲您正在修改全局變量,但全侷限定符在變量被修改的範圍內出現。此片段演示此:
global_variable = 1
def access():
# we can access a global variable without using the work "global"
print("Value of global_variable: {}".format(global_variable))
return
def qualified_modify():
# we can modify a global variable if we use the "global" qualifier
global global_variable
global_variable += 1
return
def unqualified_modify():
# we can't modify a global variable without the "global" qualifier
# this function will cause an exception to be raised
global_variable += 1
return
access()
qualified_modify()
print("Incremented global variable: {}".format(global_variable))
unqualified_modify()
這段代碼產生以下輸出:global_variable的
值:1 遞增計數全局變量:2
回溯(最近最後調用):
文件「global_var.py」,第23行,在
unq ualified_modify()
文件 「global_var.py」,第17行,在unqualified_modify
global_variable + = 1
注意,全球限定符需要出現在函數,其中變量是訪問。它告訴翻譯人員去全球範圍尋找一個變量來修改,但不是僅僅爲了閱讀全局。
由於您沒有包含整個堆棧跟蹤和異常消息,所以我不能確定,但我懷疑它指出了number = number + 1
這一行。 while number < 20:
應該沒問題,因爲解釋器可以找到並且讀取全局變量,但要修改它,您需要告訴解釋器該變量是全局變量。