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

Python基础文件出现ImportError:两种模块导入方式为何结果不同?

导入模块时from module import func报错但import module正常的问题排查与解决

问题场景

在使用pytest结合assert做测试时,遇到导入行为不一致的问题:

  • 目标模块gz.py代码:
def sumnum(a,b):
    return a+b
  • 测试文件test_x.py初始代码:
import pytest
from gz import sumnum

def test_sumnum():
    assert sumnum(5,6) == 11,'wrong'

运行测试时抛出错误:

ImportError: cannot import name 'sumnum' from 'gz'

但将测试代码改为直接导入整个模块再调用函数的形式,就能正常运行:

import pytest
import gz

def test_sumnum():
    assert gz.sumnum(5,6) == 11,'wrong'

曾怀疑是循环导入问题,但确认代码中不存在循环依赖,且疑惑两种导入方式为何表现差异。

解决方法

已定位问题:运行测试前未保存对gz.py的修改内容。当新增sumnum函数后如果没有保存文件,解释器读取的还是旧版本的gz.py(不存在sumnum函数),此时from gz import sumnum会直接报错;而import gz会先加载模块对象,后续访问gz.sumnum时才会读取函数定义,可能刚好赶上编辑器自动保存后的内容,最终导致两种导入方式出现差异,核心原因是未手动确认模块文件已保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:29