我有一个变量
path
,它应该是一个字符串元组。我想从将其设置为空元组开始,但 mypy 抱怨。
path: Tuple[str] = ()
错误是:
赋值中的类型不兼容(表达式的类型为“Tuple[]”,变量的类型为“Tuple[str]”)
如何将空元组分配给类型化变量?
我想这样做的原因是:我想动态构建元组,并且元组(与列表不同)可以用作字典键。例如(不是我实际上在做什么):
for line in fileob:
path += (line,)
some_dict[path] = some_object
这很有效,只是 mypy 不喜欢上面的类型声明。我可以使用列表,然后将其转换为元组,但这会使代码变得复杂。
编辑:
您可以像这样定义一个可变长度、同质元组:
Tuple[str, ...]
typing.Union
创建“a 或 b”类型变量:
from typing import Union
path: Union[Tuple[()], Tuple[str]] = ()
旧答案:
通过尝试将空元组分配给您键入的不允许空元组的变量,您实际上错过了键入变量的要点。
我假设您尝试分配的空元组只是一个标记值,并且您打算稍后在代码中重新分配该变量(分配给仅包含字符串的元组。)
在这种情况下,只需让令牌值是包含字符串的元组即可:
path: Tuple[str] = ('token string',)
这应该会停止错误消息。