0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 怎么捕获警告(Warning)?

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-01 10:57 次阅读

1. 警告不是异常

你是不是经常在使用一些系统库或者第三方模块的时候,会出现一些既不是异常也不是错误的警告信息

这些警告信息,有时候非常多,对于新手容易造成一些误判,以为是程序出错了。

实则不然,异常和错误,都是程序出现了一些问题,但是警告不同,他的紧急程度非常之低,以致于大多数的警告都是可以直接忽略的。

如果不想显示这些告警信息,可以直接加上参数 -W ignore 参数,就不会再显示了。

2. 警告能捕获吗

能捕获的只有错误异常,但是通过一系列的操作后,你可以将这些警告转化为异常。

这样一来,你就可以像异常一样去捕获他们了。

在不进行任何设置的情况下,警告会直接打印在终端上。

图片

3. 捕获警告方法一

在 warnings 中有一系列的过滤器。

图片

当你指定为 error 的时候,就会将匹配警告转换为异常。

之后你就可以通过异常的方式去捕获警告了。

import warnings
warnings.filterwarnings('error')    

try:
    warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
    print(e)

运行后,效果如下

图片

4. 捕获警告方法二

如果你不想对在代码中去配置将警告转成异常。

import warnings

try:
    warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
    print(e)

可以在执行的时候,只要加上一个参数 -W error ,就可以实现一样的效果

$ python3 -W error demo.py
deprecated

5. 捕获警告方法三

除了上面的方法之外 ,warnings 还自带了个捕获警告的上下文管理器。

当你加上 record=True 它会返回一个列表,列表里存放的是所有捕获到的警告,我将它赋值为 w,然后就可以将它打印出来了。

import warnings

def do_warning():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings(record=True) as w:
    do_warning()
    if len(w) >0:
        print(w[0].message)

运行后,效果如下

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2670

    浏览量

    47332
  • 终端
    +关注

    关注

    1

    文章

    1114

    浏览量

    29828
  • python
    +关注

    关注

    55

    文章

    4779

    浏览量

    84440
  • Warning
    +关注

    关注

    0

    文章

    4

    浏览量

    7035
收藏 人收藏

    评论

    相关推荐

    Eclips编译警告,每次都有这个warning,为什么?

    Eclips编译警告,每次都有这个warning,看起来不顺眼, 不知道哪里有问题,编译结果是没问题的。 报错的中间信息如下,红色已标注
    发表于 06-21 06:25

    fpga 警告解决办法 Warning (10631)

    本帖最后由 eehome 于 2013-1-5 10:08 编辑 Warning (10631): VHDL Process Statement warning at kongzhi.vhd
    发表于 12-19 23:19

    从编译警告信息(Warning)中寻找原因

    从编译警告信息(Warning)中寻找原因在跟着韦老师视频学习的时候,经常发现,我就是按照韦老师的视频边看边敲的代码,到最后为什么他都能实现结果,而我的程序频繁报错,这些问题困扰我们这些新手很长
    发表于 05-21 10:54

    quartus Warning问题(等待解答)

    因为仿真的时候一直找不到这个address,所以找到了这个警告,想问下大神们这是怎么回事?Warning (10631): VHDL Process Statement warning
    发表于 08-10 15:04

    CCS编译出现警告warning: creating output section csmpasswds without SECTIONS specification

    ccs3.3中编译出现如下警告:>> warning: creating output section csmpasswds without SECTIONS
    发表于 09-05 11:08

    封装时出现警告Warning:Errors occurred during compilation of the project

    封装的时候出现的警告Warning:Errors occurred during compilation of the project,怎么解决?
    发表于 04-15 07:34

    python捕获警告的3种方法

    ;python3 -W error demo.pydeprecated5. 捕获警告方法三除了上面的方法之外 ,warnings 还自带了个捕获警告
    发表于 03-31 16:12

    Eclips编译警告,每次都有这个warning怎么去除?

    Eclips编译警告,每次都有这个warning,看起来不顺眼,不知道哪里有问题,编译结果是没问题的。报错的中间信息如下,红色已标注
    发表于 02-20 07:40

    怎样解决MDK中的警告Warning: L6305W: Image does not have an entry p...?

    怎样解决MDK中的警告Warning: L6305W: Image does not have an entry point. (Not specified or not set due
    发表于 06-20 07:47

    "51单片机编译警告笔记一(WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"

    *** WARNING L16: UNCALLED SEGMENT IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAY_N10US?DELAY
    发表于 11-18 13:36 12次下载
    "51单片机编译<b class='flag-5'>警告</b>笔记一(<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"

    "51单片机WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"

    编译程序时出现如下警告WARNING L16: UNCALLED SEGMENT IGNORED FOR OVERLAY PROCESS出现这种警告是由于定义的函数或者代码段常量没有使用造成
    发表于 11-18 13:51 18次下载
    "51单片机<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"

    keil C51出现的警告

    (MEASURE_PROGRAM)*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL: ?C?LIMULMODULE: measure program.obj (MEASURE_PROGRAM)ADDRESS: 072BHkeil C51出现
    发表于 12-03 20:36 8次下载
    keil C51出现的<b class='flag-5'>警告</b>

    python如何捕获异常和主动抛出异常

    python如何主动抛出异常和捕获异常 1. 如何抛出异常? 异常的产生有两种来源: 一种是程序自动抛出,比如 1/0 会自动抛出 ZeroDivisionError 一种是开发者主动抛出
    的头像 发表于 03-04 17:09 9731次阅读

    python怎么捕获警告

    你是不是经常在使用一些系统库或者第三方模块的时候,会出现一些既不是异常也不是错误的警告信息?
    的头像 发表于 03-31 16:12 1364次阅读

    应用笔记|巧用 STM32CubeIDE 之编译警告

    关键字:STM32CubeIDE,warning,编译警告 目录预览 1 前言 2 巧用 warning 3 小结 1. 前言 编译警告对于工程师们来说,是再常见不过的东西了。 对于严
    的头像 发表于 06-29 17:35 1300次阅读
    应用笔记|巧用 STM32CubeIDE 之编译<b class='flag-5'>警告</b>