Python中int二维列表与float二维列表相加触发mypy报错的原因是什么
mypy报错原因解析
- mypy做静态类型检查时,默认会对无标注的字面量做最窄类型推导:你代码里的
[[0,0,0]]所有元素都是整数,没有显式标注类型,因此被mypy推导为List[List[int]]类型。 - 你定义的变量
a已显式标注为List[List[float]]类型,而Python列表的+运算符要求左右两侧的列表元素类型必须互相兼容,mypy检查时默认不允许int列表和float列表直接拼接,因此抛出类型不支持的报错。 - 运行时无报错是因为Python是动态类型语言,int类型可以隐式转换为float类型,所以列表拼接和后续numpy数组生成的操作都可以正常执行,这属于动态运行特性和静态检查规则的差异。
修复方案参考
你可以通过显式标注字面量类型,或者将字面量元素改为float形式规避报错:
# 方案1:显式标注字面量类型 def test(self) -> np.ndarray: a: List[List[float]] = [[1, 1.3, 0.5]] base: List[List[float]] = [[0,0,0]] return np.array(base + a) # 方案2:直接写float类型字面量 def test(self) -> np.ndarray: a: List[List[float]] = [[1, 1.3, 0.5]] return np.array([[0.0,0.0,0.0]] + a)
内容的提问来源于stack exchange,提问作者dmmpie
相关产品推荐
相关产品推荐

