Mypy未对错误返回类型发出警告,此情况是否正常?
Mypy未检测到返回类型不匹配的原因解析
这种情况不符合预期,正常配置下Mypy应该检测到返回类型与标注不兼容的错误。以下是可能的原因及验证方案:
类型B/C未定义或被视为
Any
如果代码里没有定义B和C类,或者它们的定义未被Mypy识别(比如未导入、被# type: ignore忽略),Mypy会将其默认为Any类型。Any与任何类型都兼容,因此不会触发类型不匹配的报错。Mypy配置宽松
若你的Mypy配置关闭了严格检查选项(比如strict = false),或者启用了ignore-missing-imports等忽略规则,会导致类型检查力度不足,无法捕捉这类错误。Mypy版本过旧
旧版本的Mypy对@property的返回类型检查可能存在缺陷,升级到最新稳定版即可修复这类问题。代码未被Mypy扫描
若目标文件被排除在Mypy的检查范围外(比如配置了exclude规则),或者文件后缀不符合要求,Mypy不会对其进行类型检查。
验证步骤
- 补充完整类型定义后重新检查:
class B: pass class C: pass class A: _b: B @property def b(self) -> C: return self._b
执行mypy your_file.py,正常情况下会返回类似Incompatible return value type (got "B", expected "C")的错误。
- 检查配置文件(如
pyproject.toml),开启严格模式:
[tool.mypy] strict = true
- 升级Mypy到最新版本:
pip install --upgrade mypy
内容的提问来源于stack exchange,提问作者Selva
相关产品推荐
相关产品推荐

