如何解决来自 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 plugin 和 pylint 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 举报,一经查实,本站将立刻删除。