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

使用mypy时NumPy函数返回Any类型的错误排查

问题原因与解决方案

你的判断完全正确——mypy报错的核心就是无法确定输入数组x的维度。np.mean的返回类型推断高度依赖输入数组的维度信息:如果x的类型没有明确标注为一维数组,mypy会默认它可能是任意维度(比如二维、三维),此时np.mean的返回值可能是标量也可能是数组,mypy无法精准推断,只能将其标记为Any,和你声明的返回类型np.float64冲突,从而触发报错。

解决方法:明确标注输入数组的维度

最严谨的方式是给x加上一维数组的类型注解,让mypy能准确推断np.mean的返回类型。具体步骤如下:

  1. 从numpy.typing导入用于标注数组维度的类型工具
  2. 给输入参数x标注为一维NDArray类型

示例代码:

import numpy as np
from numpy.typing import NDArray, Shape

def calculate_mean_square(x: NDArray[np.float64, Shape["N"]]) -> np.float64:
    return np.mean(np.square(x))

这里Shape["N"]表示数组是一维的(长度为任意正整数N),mypy会据此确定np.mean返回的是标量np.float64,不再报错。

替代方案:使用类型转换(不推荐但可用)

如果不想引入numpy.typing的类型,也可以用typing.cast强制告诉mypy返回值的类型,但这种方式属于“绕过”类型检查,不如标注输入维度严谨:

from typing import cast
import numpy as np

def calculate_mean_square(x: np.ndarray[np.float64]) -> np.float64:
    return cast(np.float64, np.mean(np.square(x)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:07