You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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脚本是从上到下逐行执行顶层代码的:

  1. 先导入unittest,定义var='one',然后定义FirstTest类(类里的test_one方法只是被定义,不会立刻执行)
  2. 接着执行del var,直接把全局变量var销毁了
  3. 最后才运行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,提问作者袧懈泻懈褌邪 袛邪胁褘写芯胁

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:01:29