将空元组分配给专用变量时类型不兼容

Incompatible types when assigning an empty tuple to a specialised variable

我有一个变量path,它应该是一个字符串元组。我想开始时将它设置为一个空元组,但 mypy 抱怨。

path: Tuple[str] = ()

错误是:

Incompatible types in assignment (expression has type "Tuple[]", variable has type "Tuple[str]")

如何将空元组分配给类型变量?

动机

我想这样做的原因是:我想动态地构建元组,并且元组(与列表不同)可以用作字典键。例如(不是我实际做的):

for line in fileob:
    path += (line,)
some_dict[path] = some_object

这很好用,除了 mypy 不喜欢上面的类型声明。我可以使用列表,然后将其转换为元组,但这会使代码复杂化。

编辑:

您可以这样定义 variable length, homogenous tuple

Tuple[str, ...]

你也可以创建一个 "a or b" 类型的变量 typing.Union:

from typing import Union

path: Union[Tuple[()], Tuple[str]] = ()

旧答案:

通过尝试将空元组分配给您键入的不允许空元组的变量,您实际上错过了键入变量的要点。

我假设您尝试分配的空元组只是一个标记值,并且您打算稍后在代码中重新分配该变量(分配给仅包含字符串的元组)。

在那种情况下,只需让令牌值是一个包含字符串的元组:

path: Tuple[str] = ('token string')

这应该会停止错误消息。