NumPy警告RuntimeWarning怎么关_np.seterr(divide=‘ignore’)屏蔽除0警告

np.seterr(divide='ignore') 不生效是因为它仅作用于NumPy的C ufunc,对Python原生除法、pandas等封装及np.errstate上下文内的操作无效;应优先使用with np.errstate(divide='ignore', invalid='ignore'):局部控制。

为什么 np.seterr(divide='ignore') 有时不生效

它只影响 NumPy 内部用 C 实现的通用 ufunc(比如 np.divide/ 运算符),但对 Python 原生除法(如 a / b 其中 ab 是纯 Python 数字)或某些封装层(如 pandas 的 Series.div)完全没用。更关键的是:一旦你用了 np.errstate 上下文管理器,它会临时覆盖全局设置,而很多库(包括旧版 matplotlib)内部就用了它。

  • 检查是否在 np.errstate 块里执行了除法——这时 np.seterr 被忽略
  • 确认被除数和除数确实是 np.ndarraynp.float64 等 NumPy 类型,不是 floatint
  • 如果用的是 np.where + 除法组合(如 np.where(cond, a/b, 0)),除法仍会先计算并触发警告,得改用 np.divide(a, b, out=..., where=...)

真正可靠的屏蔽方式:用 np.errstate 包住具体计算

比全局 np.seterr 更精准、更安全,尤其适合局部逻辑。它不会干扰其他模块,也不会被意外覆盖。

  • 写成 with np.errstate(divide='ignore', invalid='ignore'):,把可能出问题的计算放缩进里
  • 必须同时加 invalid='ignore',否则 sqrt(-1)、0/0 这类会产生 nan 的操作仍会报 RuntimeWarning
  • 不要只包一行,要把整个依赖链包进去——比如先算分母再除,分母为 0 的判断和除法最好在同一 errstate 块里
with np.errstate(divide='ignore', invalid='ignore'):
    result = numerator / denominator

除零警告背后的真实风险不能一关了之

关警告不等于问题消失。infnan 会悄悄污染后续计算:比如 np.mean 遇到 inf 默认返回 infnp.sum 可能溢出,scipy.optimize 会直接失败。

HIX Translate

由 ChatGPT 提供支持的智能AI翻译器

下载

  • 先用 np.isfinite(result)np.isinf(result) 检查结果是否可控
  • 更稳妥的做法是预过滤:用 denominator != 0 做掩码,或用 np.divide(a, b, out=np.zeros_like(a), where=b!=0)
  • 如果业务上“除零”有含义(比如缺失值),应显式赋值 np.nan,而不是依赖 inf

注意 np.seterr 的作用域和重置陷阱

它修改的是当前线程的全局状态,多线程环境下可能互相干扰;而且某些 NumPy 版本(如 1.24+)在 import 时会重置为默认值,导致你在模块开头设了,后面又失效。

  • 避免在包初始化时调用 np.seterr,优先用 errstate 上下文
  • 如果真要用全局设置,建议在主逻辑入口处(比如 if __name__ == '__main__': 下)再设一次
  • 测试时加一句 print(np.geterr()),确认设置已生效,别靠猜

实际处理时,最常被忽略的是 warning 和 error 的区别:np.seterr(divide='raise') 才会让除零变异常;而 'ignore' 只是关提示,inf 该产生还产生。别以为关了 warning 就万事大吉。

相关推荐:

安全公司警告有黑客团伙向犯罪分子兜售新型 Android 恶意木马 RedWing,82 家机构已遭攻击

7 月 9 日消息,安全公司 Zimperium 发文,透露有一款名为 RedWing 的新型 Android 恶意木马正通过 Telegram 以恶意软件即服务(MaaS,Malware-as-a-Service)模式对外出租,使缺乏技术能力的犯罪分子也能发起金融诈骗攻击,目前已有 82 家机构遭相应木马攻击。Zimperium 指出,RedWing 疑似是今年初曝光的 Android 木马 O...

英国外交大臣库珀警告:AI 或成未来 10 年最大安全挑战,世界各国必须建立紧急防护措施

感谢网友 咩咩洋 的线索投递! 7 月 6 日消息,据《卫报》昨天报道,英国外交大臣伊薇特 · 库珀警告称 AI 或将成为未来 10 年最大安全挑战,如果各国政府不能就人工智能发展制定国际准则,那么 AI 对人类的威胁堪比美国当年核爆日本广岛、长崎。库珀表示,全球正处在危险之中,美国正寻求退出“世界秩序维护者”角色。并且全球人民都有同样的感受:AI 拥有惊人潜力,同时伴随着巨大的风险。她指出,目前...

联合国专家组警告:AI 能力进步速度已超过科学认知

感谢网友 华南吴彦祖 的线索投递! 7 月 2 日消息,联合国官网 1 日公报,由 40 名顶尖科学家和专家组成的联合国 AI 独立科学小组发布首份报告,警告 AI 快速发展在为全球各国和民众创造巨大机遇的同时,也带来了不容忽视的风险。报告指出,政策制定者需要以科学证据为基础治理 AI,AI 能力的进步速度已经超过科学界的认知,也超过各国政府调整政策的速度。面对高度自主的 AI 系统,目前可用的控...

Cloudflare 细化网络爬虫屏蔽管理,将默认禁止 AI 代理与训练爬虫访问广告页面

7 月 2 日消息,互联网基础服务企业 Cloudflare 当地时间 1 日宣布细化网络爬虫屏蔽管理,根据其行为对爬虫机器人赋予搜索、代理(智能体)、训练等一系列标签,并计划在 2026 年 9 月 15 日默认禁止 AI 代理与训练爬虫访问含广告的网页。Cloudflare 表示,大多数网站所有者都希望自己的内容既能够被人工智能发现又不会损失来自知识产权的收益。负责任的 AI 企业会清晰标记其...

安全公司警告有黑客针对微软 Microsoft 365 账户发起大规模“密码喷洒”攻击,累计产生超 8100 万次登录请求

7 月 2 日消息,安全厂商 Huntress 发文,透露近期有黑客针对微软 Microsoft 365 账户发动大规模密码喷洒(Password Spraying)攻击,黑客主要利用 Microsoft Azure CLI 发起自动化登录尝试,在 6 月 12 日至 26 日期间累计产生超过 8100 万次登录请求,至少有 64 家机构旗下 78 个账户遭到入侵。Huntress 研究人员指出,...

谷歌空间如何屏蔽游戏内的弹窗广告

谷歌空间(Google Spaces)已于2017年4月关停,当前无官方服务;所谓“游戏内弹窗广告”实为Chrome中网页游戏的第三方广告,需通过Chrome内置拦截、uBlock Origin扩展(启用EasyList China等中文规则)、关闭网站通知权限及手动屏蔽元素四步解决。 谷歌空间(Google Spaces)已于2017年4月正式关停,当前已无官方服务入口,不存在“游戏内弹窗广告”...

百度浏览器如何关闭右下角的热点资讯弹窗与广告_百度系统级推送强力屏蔽工具

右下角热点资讯弹窗可通过五种方式关闭:一、在“我的→设置→消息设置”中关闭“新闻热点”;二、在“设置→实验室”中禁用“今日优选”等四项;三、PC端开启“高级设置→广告过滤”并选强力拦截;四、安装uBlock Origin并注入CSS规则屏蔽;五、关闭个性化推荐及系统级通知权限。 如果您在使用百度浏览器时,右下角频繁弹出热点资讯浮层或推广卡片,该现象通常由内置资讯推送服务、个性化推荐模块或第三方广告...

QQ浏览器如何屏蔽广告弹窗_QQ浏览器屏蔽广告弹窗设置【教程】

QQ浏览器屏蔽广告弹窗需五步:一、启用增强版广告过滤并更新规则;二、禁用网站弹出窗口权限并清理白名单;三、关闭内置资讯推送与主页推广模块;四、关闭系统通知及悬浮窗权限;五、修改Hosts文件屏蔽广告域名。 如果您在使用QQ浏览器时频繁遭遇网页弹窗广告、浮动悬浮窗、伪装下载按钮或主页强推资讯等干扰内容,则可能是广告拦截机制未启用、弹窗权限配置不当或内置推广模块处于活跃状态。以下是屏蔽广告弹窗的多种独...