为何Mypy未检测到单行函数中类型提示与代码的不一致错误?
为什么Mypy没检测到这个返回类型的矛盾?
这其实是Mypy默认行为导致的——它默认允许int到float的隐式数值兼容转换。
在Python里,int值可以直接当作float用,比如你写foo: float = 10完全合法,运行时不会出任何问题。Mypy的默认检查规则贴合Python的这种原生特性,所以它觉得返回int的函数完全符合-> float的标注要求——毕竟int值能无缝转换成float,不会有运行时风险。
如果你想要Mypy严格揪出这种“类型不完全匹配”的情况,只需要启用更严格的检查规则就行:
- 直接用
--strict参数启动Mypy,这会开启一整套严格校验规则,其中就包含对数值类型的严格检查 - 或者单独用
--strict-numeric参数,这个选项专门用来禁止int和float之间的隐式兼容转换
举个例子,用严格数值检查重新运行你的代码:
mypy --strict-numeric mymodule.py
Mypy就会输出你预期的错误:
mymodule.py:1: error: Incompatible return value type (got "int", expected "float") Found 1 error in 1 file (checked 1 source file)
这样就能检测到你原本以为会被发现的类型矛盾了。
内容的提问来源于stack exchange,提问作者DanielSank
相关产品推荐
相关产品推荐

