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方法中被赋值。
_弗雷德=神话类()
同步队列有第二个全局。
方法在专用线程上启动和停止处理队列项的控件“停止”在允许添加项时停止处理。
线程的API只允许启动一个调用。所以要重新开始处理,我需要一个新的线程实例。因此使用
if _fred is None:
和
del _fred
猜我的母语没有奖品
最佳答案
del _fred
不会将_fred
设置为None
或类似的设置。它删除了名称_fred
。完全正确。对于一个全球性的来说,就好像它从来没有存在过一样。对于一个本地人来说,就好像从来没有被分配过一样。要将变量设置为None
,请执行明显的操作:
_fred = None
关于python - 未为第二个单元测试定义全局名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16470662/