Python脚本执行顺序与unittest测试问题:删除变量后测试失败求助
问题分析与解决方案
我来帮你理清楚这个问题,你遇到的NameError核心原因是没搞懂Python脚本的执行顺序和unittest的运行时机~
为什么会报错?
咱们先拆解错误代码的逻辑(假设你把del var写在了if __name__ == '__main__'代码块外面):
import unittest var = 'one' class FirstTest(unittest.TestCase): def test_one(self): self.assertEqual(var, 'one') del var # 测试运行前就删掉了变量 if __name__ == '__main__': unittest.main()
Python脚本是从上到下逐行执行顶层代码的:
- 先导入
unittest,定义var='one',然后定义FirstTest类(类里的test_one方法只是被定义,不会立刻执行) - 接着执行
del var,直接把全局变量var销毁了 - 最后才运行
unittest.main(),此时unittest去执行test_one方法,发现要访问的var已经不存在了,自然抛出NameError
怎么实现「先通过测试再删变量」?
只需要把del var放在测试执行完成之后就行,也就是把它移到unittest.main()的后面,放在if __name__ == '__main__'代码块里:
import unittest var = 'one' class FirstTest(unittest.TestCase): def test_one(self): self.assertEqual(var, 'one') if __name__ == '__main__': unittest.main() # 先执行所有测试用例,此时var还存在 del var # 测试通过后再删除变量
这样运行脚本时,会先完成测试(var此时还活着,测试能顺利通过),测试跑完之后才会执行del var,完美满足你的需求。
可以参考的学习资料
- 先吃透Python的模块执行顺序:模块的顶层代码(变量定义、类定义、import等)会在模块被导入或直接运行时立即执行,而函数/类内部的代码只有在被调用时才会执行。可以看Python官方文档的「模块」章节。
- 学习
unittest的基础运行逻辑:unittest.main()会自动扫描当前模块中的测试类(继承unittest.TestCase的类),并执行所有以test_开头的方法。官方文档的unittest入门教程能帮你快速上手。 - 新手可以先从「Python代码执行流程」的基础内容入手,理解全局变量、函数/类的执行时机,再结合测试框架的运行机制,这类问题就会很容易解决。
内容的提问来源于stack exchange,提问作者袧懈泻懈褌邪 袛邪胁褘写芯胁
相关产品推荐
相关产品推荐

