字符串序列的Python类型注释,但不适用于字符串?

tor*_*gen 25 python typing python-3.x

是否有一个Python类型提示匹配列表,元组和可能的其他顺序类型,但不匹配字符串?

问题是字符串同时是长度为1的字符串序列(例如单个字符),因此它们在技术上匹配Sequence[str],但是为期望字符串列表的函数提供字符串可能是100%的错误.

有没有办法从类型注释中排除字符串,使其类似于不存在And[Sequence[str], Not[str]]

至于目的,我想注释这个功能:

PathType = Union[str, os.PathLike]
def escape_cmdline(argv: Union[List[PathType], Tuple[PathType]]) -> str: ...
Run Code Online (Sandbox Code Playgroud)

但是现有的签名看起来很臃肿,并没有涵盖列表和元组兼容的任何自定义类型.有没有更好的方法?

Mac*_*eek 8

显然,这对于类型提示是不可能的。PEP 484 无法区分Sequence[str]Iterable[str]str根据 Guido van Rossum 的说法。

来源:https : //github.com/python/mypy/issues/1965https://github.com/python/typing/issues/256

  • 想知道如果类型注释不能帮助像这样基本的东西,它的意义是什么。 (7认同)