Ожидаемый тип Union[str, bytes, int], но получен Sequence[Union[int, float, str]]

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 был распакован?


person pstatix    schedule 08.04.2020    source источник


Ответы (1)


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

def record(self, *data: Union[int, float, str]) -> None:
person chepner    schedule 08.04.2020