Мне просто нужно было отладить проблему в производстве, которая сводится к следующему поведению.
Что я должен был напечатать:
>>> 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 могут обнаруживать переопределенные встроенные функции.