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

制作可复用doctest调用函数遇ModuleNotFoundError问题求助

复用doctest执行函数的模块导入错误解决

问题详情

尝试编写可复用的doctest执行函数以避免重复代码,但调用时触发ModuleNotFoundError,错误信息如下:

Traceback (most recent call last):
  File "/Users/cameron/Documents/Bubble sort .py", line 25, in <module>
    import doctest1.doctester
ModuleNotFoundError: No module named 'doctest1'

涉及代码:

保存的doctester函数(假设文件名为doctester.py)

def doctester():
    if __name__ == '__main__':
        import doctest
        doctest.testmod()

冒泡排序调用脚本

def bubble_sort(L):
    """
    >>> L = [7, 3, 5, 2]
    >>> bubble_sort(L)
    >>> L
    [2, 3, 5, 7]
    """
    end = len(L) - 1

    while end != 0:
         for i in range (end):
             if L[i] > L[i + 1]:
                 L[i], L[i +1] = L[i + 1], L[i] 

         end = end - 1

import doctest1.doctester

解决方法

1. 修正模块导入路径

  • 如果doctester函数所在文件和冒泡排序脚本在同一目录,且文件名为doctester.py,无需使用嵌套模块导入方式,直接改为:
    from doctester import doctester
    
  • 若要将函数放在doctest1文件夹中,需在该文件夹下创建空的__init__.py文件,让Python识别为合法模块,此时导入语句可保留import doctest1.doctester,调用时需写成doctest1.doctester.doctester()。

2. 调整doctester函数的执行逻辑

原函数中的if __name__ == '__main__':会导致仅直接运行doctester.py时才执行测试,被其他脚本导入调用时无法触发。移除该判断,让函数被调用时直接执行测试:

def doctester():
    import doctest
    doctest.testmod()

3. 完整修改后的冒泡排序脚本

def bubble_sort(L):
    """
    >>> L = [7, 3, 5, 2]
    >>> bubble_sort(L)
    >>> L
    [2, 3, 5, 7]
    """
    end = len(L) - 1

    while end != 0:
         for i in range (end):
             if L[i] > L[i + 1]:
                 L[i], L[i +1] = L[i + 1], L[i] 

         end = end - 1

# 导入并调用doctester函数
from doctester import doctester
doctester()

4. 验证运行

直接运行冒泡排序脚本,doctest会自动执行所有文档测试,无报错则表示测试通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:54:17