预期类型 Union[str, bytes, int] 但得到了 Sequence[Union[int, float, str]]
Expected type Union[str, bytes, int] but got 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...
它说解压后的 zip
中的 value
与参数 data
的类型相同,但它不是也不应该是。如果它是 Sequence
的元素,则意味着它将是 Union[int, float, str]
类型。
难道PyCharm没有意识到zip
被解压了吗?
根据 PEP 484,类型提示适用于 *data
的每个 元素 ,而不是序列本身。你不需要 Sequence
; *
.
已经暗示了这一点
def record(self, *data: Union[int, float, str]) -> None:
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...
它说解压后的 zip
中的 value
与参数 data
的类型相同,但它不是也不应该是。如果它是 Sequence
的元素,则意味着它将是 Union[int, float, str]
类型。
难道PyCharm没有意识到zip
被解压了吗?
根据 PEP 484,类型提示适用于 *data
的每个 元素 ,而不是序列本身。你不需要 Sequence
; *
.
def record(self, *data: Union[int, float, str]) -> None: