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

仅在执行mock.patch时触发ModuleNotFoundError:找不到my_module模块

报错原因

这个报错是mock.patch的路径解析规则和实际项目结构不匹配导致的:

  • mock.patch 接收字符串格式的目标路径时,会按照Python标准模块导入规则逐级解析定位目标对象。你写的路径是'my_module.compute_something',框架会优先尝试导入my_module作为顶层模块,但你的项目里根本不存在这个顶层模块——my_module是my_package包内部的子模块,完整可导入路径是my_package.my_module,所以第一步导入就直接失败,抛出ModuleNotFoundError。
  • 你写的unmocked函数能正常运行,是因为脚本顶部已经通过from my_package import my_module把模块对象加载到了当前脚本的内存命名空间里,后续调用走的是已有的对象引用,不需要重新触发导入流程,这和mock.patch独立的路径解析逻辑完全是两回事,所以不会出现报错。

修复方案

把mock.patch的目标路径补全为完整的可导入路径即可:

@mock.patch('my_package.my_module.compute_something')
def mocked(mock_compute_something):
    mock_compute_something.return_value = 1
    print(my_module.compute_something())

修改后重新运行脚本,就会输出符合预期的结果:

0
1

实用提示:使用mock.patch时,永远要填写可以被Python import语句正常解析的完整模块路径,不能只写你在当前文件导入时用的短名——哪怕你已经通过from 包名 import 模块名的方式拿到了对象引用,这个短名也不会成为全局可导入的模块路径,无法被mock框架正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 12:24:04