import sys
from threading import Thread
is_online=1
class CommandListenerThread(Thread):
global is_online
def run(self):
while is_online:
next_command=sys.stdin.readlines();
if next_command == 'exit':
is_online=0
else:
print next_command
listener=CommandListenerThread()
listener.start()
当我运行此python代码时,它显示错误:“UnboundLocalError:在分配之前引用的局部变量'is_online'
我测试了另一个代码,它使用相同的方式访问类中的全局变量,并且它工作正常。那么,这个特定的代码出了什么问题?
使用线程监听命令行的代码可能看起来很奇怪,但它只是 我的程序的一部分,当我运行整个程序时会出错。
谢谢你们答案 0 :(得分:2)
将global is_online
移至run()
以解决错误。
要解决您的其他问题(在下面的评论中),为什么不将它变为静态类变量?
class CommandListenerThread(Thread):
is_online = 1
def run(self):
print CommandListenerThread.is_online
如果您必须使用具有全局is_online
的其他代码,您可以按如下方式采用DI(依赖注入)方法:
导入系统 来自线程导入线程
is_online = 2
class CommandListenerThread(Thread):
def __init__(self, is_online):
super(CommandListenerThread, self).__init__()
CommandListenerThread.is_online = is_online # now it's a static member
# if you want to make it an instance member use self.is_online
def run(self):
print CommandListenerThread.is_online
listener=CommandListenerThread(is_online) # inject the value to the constructor
listener.start()