微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自 PEP 526

如何解决来自 PEP 526

我只需要调试生产中的一个问题,该问题归结为以下行为。

我应该输入的内容

>>> import pandas as pd
>>> from io import StringIO
>>> a: pd.DataFrame = pd.read_csv(StringIO('a,b,c\n1,2,3'))
>>> isinstance(a,pd.DataFrame)
True

我实际输入的内容

>>> a = pd.DataFrame = pd.read_csv(StringIO('a,pd.DataFrame)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
TypeError: isinstance() arg 2 must be a type or tuple of types

这很难追踪,因为 isinstance() 检查是在拼写错误几个月后添加的。原始代码有效,因为 pd.DataFrame 未在作用域中的任何其他地方使用。

有什么办法可以捕捉到这个讨厌的错字? mypy 认为没有问题。


编辑:原始问题使用 list 而不是 pd.DataFrame,但正如一些用户指出的那样,此 flake8 pluginpylint W0622 都可以检测重新定义的内置函数。>

解决方法

TL;DR

pip install pandas-stubs

并且 mypy 应该开始失败:

error: Cannot assign to a type

长答案

您认为 mypy 应该阻止此操作是正确的。但问题是pandas 项目还没有包含类型信息。到目前为止(2021 年 3 月),pandas 团队有自己的存根项目正在进行中,请参阅 https://pypi.org/project/pandas-stubs/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。