【发布时间】:2021-03-25 10:52:25
【问题描述】:
我只需要在生产中调试一个归结为以下行为的问题。
我应该输入的内容:
>>> 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,b,c\n1,2,3'))
>>> isinstance(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 都可以检测重新定义的内置函数。
【问题讨论】:
-
Flake8 Builtins plugin: "检查 python 内置函数是否被用作变量或参数。"
-
你说的都对,但错误仍然可能发生在非 bultin 类型上。我已经更新了问题。