我的代码如下:
from typing import Tuple
a: Tuple[int, int] = tuple(sorted([1, 3]))
Mypy告诉我:
分配中的类型不兼容(表达式的类型为“ Tuple [int, ...]“,变量的类型为” Tuple [int,int]“)
我在做什么错? Mypy为什么无法弄清楚排序后的元组将恰好返回两个整数?
答案 0 :(得分:1)
对sorted
的调用将产生一个List[int]
,其中不包含有关长度的信息。这样,从中生成元组也没有有关长度的信息。元素的数量完全不受您使用的类型的定义。
在这种情况下,您必须告诉类型检查器信任您:
a: Tuple[int, int] = tuple(sorted([1, 3])) # type: ignore
或者,创建一个可识别长度的排序:
def sort_pair(a: T, b: T) -> Tuple[T, T]:
return (a, b) if a < b else (b, a)