Eclipse 平台,Python 3.3。
我创建了下面的代码来演示使用全局变量和 python unittest 时的问题。我想知道为什么第二个单元测试(直接重复第一个)会导致
NameError: global name '_fred' is not defined
尝试注释掉第二个测试,一切都会通过。
(注意:我在示例之后添加了真实代码试图实现的内容的简短摘要,希望它在那里不会那么突兀,因为它与问题并不真正相关)
''' Global Problem
'''
import unittest
_fred = None
def start():
global _fred
if _fred is None:
_fred = 39
_fred += 3
def stop():
global _fred
if _fred is not None:
del _fred
class Test(unittest.TestCase):
def setUp(self):
start()
def tearDown(self):
stop()
def test_running_first_time(self):
assert(_fred == 42)
def test_running_second_time(self):
assert(_fred == 42)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()
在实际代码中,_fred 是引用从 Thread 派生的类的实例的变量(请参阅我在那里所做的)并在 start 方法中分配。
_fred = MyThreadClass()
同步队列还有第二个全局变量。
这些方法启动和停止控制专用线程上的处理队列项。'stop' 在允许添加项目的同时停止处理。
Thread API 只允许启动一次调用。所以要重新开始处理,我需要一个新的 Thread 实例。因此使用
if _fred is None:
和
del _fred
猜我的主要语言没有奖品