如何在Mypy中校验对象相等性不触发报错,含pd.Timestamp场景
解决方案
报错的核心原因是pandas官方包默认不内置类型标注,mypy无法识别pd.Timestamp类型,才会将两个参数判定为Any,进而认为==运算的返回值也是Any,和函数声明的bool返回类型冲突。按以下步骤操作即可消除报错:
- 安装pandas官方维护的类型标注扩展包:
执行命令pip install pandas-stubs,安装完成后mypy就能正确识别pd.Timestamp等pandas内置类型,大部分情况下直接就能解决这个报错。 - 若安装后仍有报错,显式转换返回值为原生bool类型即可:
修改后的代码如下:
这是为了兼容部分版本中import pandas as pd def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool: return bool(left == right)Timestamp相等运算返回numpybool_类型而非Python原生bool的场景,显式转换后mypy可以完全确认返回值类型符合要求。 - 可选配置:如果你的mypy开启了严格校验规则,可在mypy配置文件中添加pandas-stubs的插件配置,避免其他衍生的类型校验问题:
[mypy] plugins = pandas-stubs.mypy_plugin
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

