制作可复用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
相关产品推荐
相关产品推荐

