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

Python doctest跨目录导入模块失败及语法错误求助

问题解决步骤

1. 修正模块命名(推荐方案)

Python模块名需遵循PEP8规范,应使用下划线替代连字符,避免语法冲突。将0-add_integer.py重命名为0_add_integer.py,此时测试文件中的导入语句可直接写成:

>>> from 0_add_integer import add_integer # doctest: +NORMALIZE_WHITESPACE

在项目根目录运行测试命令即可正常执行:

python -m doctest tests/0-add_integer.txt -v

根目录会自动加入Python的搜索路径,测试文件能直接找到上级目录的模块。

2. 保留原模块名的临时解决方案

若必须保留原模块名,需同时解决语法错误和路径问题:

  • 语法错误:带连字符的模块名无法直接用from ... import语法,需借助importlib动态导入
  • 路径问题:手动将上级目录添加到Python搜索路径

修改测试文件中的导入代码块:

>>> import sys
>>> sys.path.append('..')  # 将上级目录加入Python路径
>>> import importlib
>>> add_module = importlib.import_module('0-add_integer')
>>> add_integer = add_module.add_integer

同样在项目根目录运行上述测试命令即可。

测试驱动开发(TDD)学习建议

  • 严格遵循"红-绿-重构"循环:先写必然失败的测试用例(红),再编写刚好能通过测试的最简代码(绿),最后优化代码结构、性能且不破坏现有功能(重构)。
  • 从小案例练手:从简单函数(如当前的加法函数)开始,用doctest或unittest编写测试,熟悉边界场景(如非整数输入、零、负数)的测试逻辑,再逐步过渡到复杂模块。
  • 重视测试覆盖率:确保每个功能分支都有对应测试用例,避免遗漏潜在逻辑漏洞。
  • 拓展测试工具:除doctest外,学习使用unittest或pytest框架,它们支持测试夹具、参数化测试等复杂场景;用coverage.py检查测试覆盖情况。
  • 养成先测试后编码的思维:写代码前先明确需求的输入输出,将需求转化为测试用例,再实现功能,提前规避逻辑错误,减少后期调试成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:07:14