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

MyPy配置允许numpy无类型调用仍报no-untyped-call错误怎么办?

配置不生效的核心原因

你在[mypy-numpy.*]块下配置的规则仅作用于numpy模块自身的代码检查逻辑,不会对你自己编写的业务代码生效。
你全局开启了disallow_untyped_calls = True,该规则会作用于所有你自己写的代码:只要MyPy检测到你调用了没有完整类型标注的函数,无论这个函数来自哪个第三方库,都会触发no-untyped-call报错。你遇到的报错就是因为当前环境下numpy的kron函数没有被MyPy识别到有效类型标注,和numpy模块自身的检查规则无关。

MyPy 配置作用域规则

MyPy的配置分为两类,作用域逻辑如下:

  • 全局配置:定义在[mypy]块下的所有配置,对所有被MyPy检查的代码生效,包括你自己的业务代码、你导入的第三方依赖的代码(如果MyPy开启了第三方库检查)。
  • 按模块匹配的配置:定义在[mypy-<模块匹配规则>]块下的配置,仅对匹配到的模块本身的代码生效,不会作用于其他模块中调用该模块的逻辑。比如你给numpy.*加的配置,只会在MyPy检查numpy源码本身的时候生效,对你的代码调用numpy的逻辑没有任何影响。
解决方案

你可以任选以下一种方案解决报错:

  1. 仅忽略当前行的报错:在调用np.kron的代码行末尾添加注释 # type: ignore[no-untyped-call],即可仅跳过当前行的无类型调用检查,不会影响其他代码的检查严格度,修改后代码如下:
distance_win: npt.NDArray[np.float32] = np.kron(
    np.ones((10, 1))
    , np.ones((10, 1))
)  # type: ignore[no-untyped-call]
  1. 补全numpy的类型标注:安装numpy的补充类型包types-numpy,安装命令为pip install types-numpy,安装后MyPy就能识别到np.kron的完整类型标注,不会再触发无类型调用报错,这是最推荐的方案,不会降低检查严格度。
  2. 全局关闭无类型调用检查:将全局配置里的disallow_untyped_calls = True修改为False,不过该方案会放松所有代码的检查严格度,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:12:04