MyPy报[attr-defined]错误:模块存在属性却提示不存在,代码可正常执行
解决MyPy报
attr-defined错误的方案 第一步:修正导入路径的明显错误
你的测试文件test_python_file.py里的导入路径多了一个不存在的schemas层级,实际python_file.py位于src/some/nested/folder/下,正确的导入语句应该是:
from src.some.nested.folder.python_file import attribute_thats_definetely_there
这是导致MyPy报错的核心原因——你导入了一个不存在的模块路径,虽然运行时可能因为环境巧合能执行,但静态检查工具会严格校验路径。
第二步:调整MyPy配置
修改pyproject.toml中的MyPy配置,适配你的常规包结构:
[tool.mypy] python_version = "3.10" # 移除namespace_packages=true,你的结构有__init__.py,属于常规包而非命名空间包 allow_redefinition = true show_error_codes = true disallow_untyped_defs = true ignore_missing_imports = true # 添加src到源码路径,确保MyPy能正确识别src下的模块 paths = ["src"]
- 移除
namespace_packages = true:命名空间包不需要__init__.py,而你的结构中存在该文件,开启这个选项会让MyPy错误识别包结构。 - 添加
paths = ["src"]:明确告诉MyPy将src目录作为源码根,避免模块路径识别混乱。
第三步:验证包结构完整性
检查所有__init__.py文件,确保它们是空文件或者没有影响模块导入的代码——如果__init__.py中有__all__定义,需要确保包含你要导入的属性,不过直接导入模块属性的场景下,空的__init__.py就足够。
执行以上步骤后,重新运行MyPy,错误应该会被解决。
内容的提问来源于stack exchange,提问作者Marthinus Bosman
相关产品推荐
相关产品推荐

