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