预期类型 Union[str, bytes, int] 但得到 Sequence[Union[int, float, str]]
Posted
技术标签:
【中文标题】预期类型 Union[str, bytes, int] 但得到 Sequence[Union[int, float, str]]【英文标题】:Expected type Union[str, bytes, int] but got Sequence[Union[int, float, str]] 【发布时间】:2020-07-21 04:42:28 【问题描述】: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
已解包?
【问题讨论】:
【参考方案1】:根据PEP 484,类型提示适用于*data
的每个元素,而不是序列本身。你不需要Sequence
; *
已经暗示了这一点。
def record(self, *data: Union[int, float, str]) -> None:
【讨论】:
以上是关于预期类型 Union[str, bytes, int] 但得到 Sequence[Union[int, float, str]]的主要内容,如果未能解决你的问题,请参考以下文章
发送图像时预期的 str、bytes 或 os.PathLike 对象,而不是 numpy.ndarray
TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是 Streamlit Web 应用程序中的 PngImageFile