NumPy 1.20+ 主动移除 np.int、np.float、np.bool 等别名,因其易与 Python 内置类型混淆、干扰类型注解和跨平台行为;应替换为 np.int_(或 int/np.int64)、np.float64、np.bool_ 等明确类型。

为什么 np.int、np.float、np.bool 会报 AttributeError
这不是环境或安装问题,是 NumPy 主动移除——从 1.20 开始弃用,1.24 起彻底删除。它们曾是 int、float、bool 的别名,但容易和 Python 内置类型混淆,干扰类型注解(PEP 484)和跨平台行为。官方只保留带下划线的明确类型:np.int_、np.float64、np.bool_。
哪些旧写法必须改,对应怎么替换
直接替换即可,逻辑不变,但语义更准:
-
np.int→ 优先用int(普通标量场景);数组dtype用np.int32或np.int64(不推荐np.int_,它平台相关) -
np.float→ 必须换为np.float64(np.float_已被官方标记为“语义模糊”,文档明确不建议) -
np.bool→ 换成np.bool_(注意结尾下划线,不是bool) -
np.object→ 换成np.object_(同样,下划线不可省) -
np.long→ Python 3 中long已并入int,直接删或换np.int64
为什么升级后还报错:三个隐蔽原因
代码里搜不到 np.int 不代表没调用:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 某个第三方库(如老版
scikit-learn、matplotlib)内部硬编码了废弃类型,需查其 issue 或升级该库 - 字符串拼接或动态 import 场景下,
"np." + "int"类写法逃过文本搜索,需启用运行时捕获 - 未清理干净的残留包信息:比如
numpy-1.20.3-dist-info目录仍留在site-packages下,conda/pip 卸载未必彻底
如何让隐藏调用无处遁形
别靠肉眼扫,用工具+运行时双重验证:
立即学习“Python免费学习笔记(深入)”;
- Linux/macOS 终端:
grep -r "np\.int\|np\.float\|np\.bool\|np\.long\|np\.object" --include="*.py" ./your_project/ - VS Code 正则搜索:
np\.(int|float|bool|long|object)(?!\_)(排除已带下划线的合法写法) - 启动时强制报错:
import warnings; warnings.filterwarnings("error", category=FutureWarning, module="numpy"),让所有弃用路径在首次执行时就崩,不埋雷
np.int_,而是那些藏在依赖链深处、没人维护的私有包或冻结版本里的硬编码调用——它们不会出现在你的 IDE 搜索结果里,却会在某次 CI 构建中突然失败。

















