预期类型为Union [str,bytes,int],但获得了Sequence [Union [int,float,str]]

时间:2020-04-08 17:17:26

标签: python linter

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 个答案:

答案 0 :(得分:1)

对于每个PEP 484,类型提示适用于*data的每个元素,而不适用于序列本身。您不需要Sequence; *已经隐含了。

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