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/

10-12 00:13
查看更多