numpy 1.20+ 中 np.int、np.float、np.bool 报 attributeerror 是因官方主动弃用这些易混淆的内置类型别名,仅保留带下划线的明确类型如 np.int_、np.float64、np.bool_,以提升可移植性与类型安全性。

为什么 np.int、np.float、np.bool 会报 AttributeError
这些名字在 NumPy 1.20+ 中被正式移除,不是 bug,是故意废弃。它们曾是 Python 内置类型(int、float、bool)的别名,但容易引发类型混淆和跨平台问题。现在官方只保留带下划线的明确别名:np.int_、np.float64、np.bool_。
常见错误现象包括:
AttributeError: module 'numpy' has no attribute 'int'AttributeError: module 'numpy' has no attribute 'float'AttributeError: module 'numpy' has no attribute 'bool'
不要试图降级 NumPy 来“修复”——旧版本有安全缺陷,且新项目迟早要适配。
所有已废弃类型与对应现代写法对照表
直接替换即可,无需改逻辑。注意:带下划线的才是当前稳定 API。
-
np.int→np.int_(等价于np.int64在大多数平台) -
np.float→np.float64(不推荐用np.float_,它语义模糊,官方文档明确建议用np.float64) -
np.bool→np.bool_ -
np.long→np.int64(long在 Python 3 已合并进int,NumPy 不再提供该别名) -
np.object→np.object_(注意结尾下划线,不是object)
示例:
import numpy as np # ❌ 报错 x = np.array([1, 2, 3], dtype=np.int) # ✅ 正确 x = np.array([1, 2, 3], dtype=np.int_)
如何快速定位代码中所有废弃用法
别靠肉眼搜 np.int —— 它可能藏在字符串、注释或拼接变量里。用工具精准扫描:
- 运行
grep -r "np\.int\|np\.float\|np\.bool\|np\.long\|np\.object" --include="*.py" ./your_project/(Linux/macOS) - 在 VS Code 中用正则搜索:
np\.(int|float|bool|long|object)(?!\_),能避开已带下划线的合法写法 - 启用
numpy.VisibleDeprecationWarning:在脚本开头加import warnings; warnings.filterwarnings("error", category=FutureWarning, module="numpy"),让废弃调用直接抛异常,暴露隐藏调用点
升级 NumPy 后仍报错的三个隐蔽原因
即使你确认代码全改了,还报错,大概率是以下情况之一:
- 某个第三方库(如老版本
scikit-learn、matplotlib或私有包)内部硬编码了np.int,需查其 issue 页面或升级该库 - 你的项目里有文件命名为
numpy.py或array.py,导致 Python 导入了本地文件而非真正的numpy模块 - conda 环境混用了 pip 和 conda 安装的 NumPy,执行
conda list numpy和pip show numpy对比路径与版本,不一致就用conda install numpy统一管理
最易被忽略的是:np.int_ 和 np.int64 虽常等价,但在 Windows 上 np.int_ 是 32 位,np.int64 才是 64 位——如果代码依赖确定位宽,必须显式写 np.int64,不能无脑替换下划线。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











