【发布时间】:2022-01-23 03:20:36
【问题描述】:
获取以下代码:
from typing import Union
value: Union[str, bytes]
stripped = [line.strip() for line in value.splitlines()]
reveal_type(stripped)
对于任何阅读的人来说,很明显stripped 应该是类型
Union[List[str], List[bytes]]
但是,mypy 将其识别为
List[Union[str, bytes]]
如何让mypy 将其识别为Union[List[str], List[bytes]]?
【问题讨论】:
-
我没有看到这个问题。您有一个联合类型列表,而不是列表类型的联合
-
如果
value是str,那么stripped将是str的列表。如果value是bytes,那么stripped将是bytes的列表。没有其他可能,不是吗? -
列表是一个列表。时期。因此,这就是
stripped的类型。每个元素要么是str要么是bytes -
是的,但我知道要么所有元素都是
str,要么所有元素都是bytes。有没有办法告诉mypy这个? -
我想你可以尝试强制它
stripped: Union[List[str], List[bytes]] = [...]