Ожидаемый тип Union [str, bytes, int], но получил Sequence [Union [int, float, str]] - PullRequest
0 голосов
/ 08 апреля 2020

PyCharm показывает это предупреждение, и я не могу понять, почему.

def record(self, *data: Sequence[Union[int, float, str]]) -> None:

    for field, value in zip(self.fields, data):
        if field.type in {1, 3}:
            try:
                value = int(value)  # warning is here
            except ValueError:
                pass

    # other logic...

Он говорит, что value из распакованного zip имеет тот же тип, что и аргумент data, но это не так и не должно быть. Если бы это был элемент Sequence, это означало бы, что это будет тип Union[int, float, str].

Разве PyCharm не понимает, что zip был распакован?

1 Ответ

1 голос
/ 08 апреля 2020

Per PEP 484 , подсказка типа применяется к каждому элементу из *data, а не к самой последовательности. Вам не нужно Sequence; это уже подразумевается *.

def record(self, *data: Union[int, float, str]) -> None:
...