You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy sum方法mypy类型检查失败问题排查:是mypy Bug、numpy Bug还是代码问题?

问题分析与解答

首先可以明确:你的代码完全没问题,运行结果正确;这个报错既不算numpy的bug,也不是mypy的bug,本质是numpy的类型注解在这个场景下的精度不足,加上mypy暂时无法根据axis参数自动推导更精确的返回类型导致的。

具体原因拆解

  • 代码逻辑正确性:当你调用ndarray.sum(axis=0)时,确实会返回一个按列求和的ndarray,和整数2做取模操作在运行时完全合法,所以代码本身没有问题。
  • mypy报错的根源:numpy对sum方法的类型标注是Union[number[Any], ndarray]——这个标注是为了兼容两种场景:

    当不指定axis(或axis=None)时,返回单个数值;当指定具体axis时,返回维度降低的ndarray。
    但mypy目前没办法根据你传入的axis=0这个参数值,自动将返回类型从Union缩小到ndarray,所以它依然认为返回值可能是单个number[Any]类型。而mypy的类型检查规则中,number[Any]和int的取模操作没有被明确支持,因此抛出了类型错误。

临时解决办法

你可以通过类型断言告诉mypy返回值的具体类型,绕过这个检查:

  1. 使用typing.cast明确指定类型:
from typing import cast
import numpy

arr_sum = cast(numpy.ndarray, numpy.array([[1,2,3],[4,5,6]]).sum(axis=0))
print(arr_sum % 2)
  1. 或者利用numpy的view方法(本质也是类型提示):
import numpy

result = numpy.array([[1,2,3],[4,5,6]]).sum(axis=0)
print(result.view(numpy.ndarray) % 2)

另外,你也可以关注numpy和mypy的后续更新——随着numpy类型注解的完善,或者mypy对numpy类型推导的优化,这个问题可能会被自动修复。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:02:37