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

使用unittest时if __name__ == '__main__'运行触发AttributeError求助

解决unittest中的AttributeError和Empty test suite问题

我来帮你排查这个问题!从报错信息和你的代码来看,问题出在导入方式以及和PyCharm的TeamCity测试运行器的兼容性上,具体原因和解决方案如下:

问题根源

你使用了from unittest import *这种通配符导入方式,在Python 3.7.0b4这个beta版本中,这种导入可能会和PyCharm的TeamCity测试插件产生冲突——导致测试用例的内部属性_testFunc被错误识别为字符串类型,从而触发'str' object has no attribute '__name__'的错误。同时,这种导入方式也可能让main()函数无法正确扫描到你的测试类,出现Empty test suite的提示。

另外补充一点:虽然你用assert True能运行,但更推荐使用unittest框架自带的断言方法(比如self.assertTrue()),这能更好地和测试框架集成,生成更准确的测试报告。

修复后的代码

把代码改成下面的任意一种形式都可以解决问题:

方案1:导入整个unittest模块(推荐)

import unittest

class TestSomething(unittest.TestCase):
    def test_thing(self):
        self.assertTrue(True)  # 使用框架自带的断言方法

if __name__ == '__main__':
    unittest.main()

方案2:明确导入需要的组件

如果你不想导入整个模块,可以明确导入TestCase和main:

from unittest import TestCase, main

class TestSomething(TestCase):
    def test_thing(self):
        self.assertTrue(True)

if __name__ == '__main__':
    main()

验证方法

运行修改后的代码,应该能正常执行测试,不会再出现AttributeError和Empty test suite的问题。如果还是有问题,可以尝试在PyCharm中暂时关闭TeamCity测试集成,或者升级到Python 3.7的正式版本(beta版本本身可能存在一些兼容性问题)。

内容的提问来源于stack exchange,提问作者Mykola Zomchak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:54