gpt4 book ai didi

python - 没有为第二个单元测试定义全局名称

转载 作者:行者123 更新时间:2023-11-28 20:25:01 26 4
gpt4 key购买 nike

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

猜我的主要语言没有奖品

最佳答案

del _fred 不会将 _fred 设置为 None 或类似的东西。它删除了名称 _fred。完全地。对于全局来说,就好像它从未存在过一样。对于本地人来说,就好像从来没有被分配到过一样。要将变量设置为 None,请执行显而易见的操作:

_fred = None

关于python - 没有为第二个单元测试定义全局名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com