Параметризованные обобщения не могут использоваться с проверками классов или экземпляров - PullRequest
1 голос
/ 07 июня 2019

Я написал код, но получаю следующее сообщение в pycharm (2019.1): «Параметризованные обобщения не могут использоваться с проверками классов или экземпляров»

    def data_is_valid(data):
        keys_and_types = {
            'comment': (str, type(None)),
            'from_budget': (bool, type(None)),
            'to_member': (int, type(None)),
            'survey_request': (int, type(None)),
        }

        def type_is_valid(test_key, test_value):
            return isinstance(test_value, keys_and_types[test_key])

        type_is_valid('comment', 3)

Я действительно плохо понимаю это сообщение.Я сделал что-то не так или это ошибка в pycharm?Ошибка исчезнет, ​​если я явно приведу тип к кортежу.

def type_is_valid(test_key, test_value):
    return isinstance(test_value, tuple(keys_and_types[test_key]))

screenshot

1 Ответ

3 голосов
/ 07 июня 2019

Это похоже на ошибку в pycharm, когда немного переусердствует в предположении, что вы используете модуль typing непреднамеренным образом. Посмотрите на это, например, где это предположение будет правильным:

enter image description here

Классы в модуле typing полезны только в контексте аннотации типов, а не для проверки или сравнения с реальными классами, что пытается сделать isinstance. Поскольку pycharm видит простой объект в квадратных скобках, не содержащий литерала, он приходит к неверному выводу, который вы видите.

Ваш код в порядке, вы можете использовать его в точности так, как он есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...