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

Pydroid3运行Python unittest报AttributeError测试失败如何解决

Pydroid3 环境下 unittest 运行报错解决方案

问题场景

在安卓端Pydroid3内置Python3.9的IPython交互层运行单元测试代码时,测试执行失败,抛出属性错误与系统退出相关警告,需调整配置让单元测试正常通过。

涉及代码

name_function.py 模块代码

def get_formatted_name(first,last):
    """Generate a neatly formatted full name"""
    full_name=f"{first} {last}"
    return full_name.title()

testing_name_function.py 测试代码

import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
    def test_first_last_name(self):
        formatted_name=get_formatted_name('tulasi','reddy')
        self.assertEqual(formatted_name,'Tulasi Reddy')
    
if __name__=='__main__':
    unittest.main()

运行报错输出

E
ERROR: /data/data/ru (unittest.loader._FailedTest)
AttributeError: module '__main__' has no attribute '/data/data/ru'
Ran 1 test in 0.007s
FAILED (errors=1) 
An exception has occurred, use %tb to see the full traceback. 
SystemExit: True

报错根因

姓名格式化函数本身逻辑无错误,不需要修改业务代码,报错来自运行环境和unittest默认参数的适配冲突:

  1. IPython交互环境运行脚本时,会传入脚本所在路径作为启动参数,unittest.main()默认会读取命令行传入的参数作为待查找的测试用例名,误把截断的路径/data/data/ru当成测试用例去__main__模块查找,找不到对应属性就会抛出错误。
  2. unittest默认运行结束后会调用sys.exit()退出进程,在IPython交互层会触发系统退出警告。

修复方案

两种方案二选一即可:

  • 修改测试脚本的入口调用代码,手动指定unittest运行参数,禁止读取外部命令行参数、禁止运行结束后退出进程,将原入口行替换为以下代码:
if __name__=='__main__':
    unittest.main(argv=[''], exit=False)

参数说明:argv=['']手动传入空的参数列表,跳过对环境传入路径的解析;exit=False关闭测试结束后的自动退出逻辑,避免触发IPython的系统退出警告。如果需要查看更详细的测试输出,可以把参数改成argv=['', '-v']开启详细输出模式。

  • 不修改代码,切换到Pydroid3内置的终端(Terminal)界面,进入脚本所在目录后,直接执行命令python testing_name_function.py运行脚本。非交互的终端运行模式下不存在参数解析冲突,原代码可以直接运行通过。

正常运行预期

修复后运行测试,将输出以下结果,代表测试通过:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:42:52