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

问题描述 投票:0回答:1

我有一个变量

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

path: Tuple[str] = ()

错误是:

赋值中的类型不兼容(表达式的类型为“Tuple[]”,变量的类型为“Tuple[str]”)

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

动机

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

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

这很有效,只是 mypy 不喜欢上面的类型声明。我可以使用列表,然后将其转换为元组,但这会使代码变得复杂。

python tuples mypy python-typing
1个回答
25
投票

编辑:

您可以像这样定义一个可变长度、同质元组

Tuple[str, ...]

您还可以使用

typing.Union
创建“a 或 b”类型变量:

from typing import Union

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

旧答案:

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

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

在这种情况下,只需让令牌值是包含字符串的元组即可:

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

这应该会停止错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.