当前位置: 首页 > 编程笔记 >

python捕获警告的三种方法

龙俊良
2023-03-14
本文向大家介绍python捕获警告的三种方法,包括了python捕获警告的三种方法的使用技巧和注意事项,需要的朋友参考一下

1. 警告不是异常

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

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

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

如果不想显示这些告警信息,可以直接加上参数  -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)

运行后,效果如下

以上就是python捕获警告的三种方法的详细内容,更多关于python 捕获警告的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 问题内容: 在我的python脚本中,我想使用MySql捕获“我的查询截断了列’xxx’的数据”警告。 我看到了一些建议以下代码的帖子,但它不起作用。 您是否知道在使用此代码之前是否必须导入某些特定模块或是否应调用某些选项/标志? 谢谢大家 阿菲格 问题答案: 警告仅仅是:警告。他们被报告给(通常)stderr,但是没有做其他事情。您不能像异常一样捕获它们,因为它们没有被引发。 你可以,但是,配置

  • 下面尝试包装lambda的(简化的)代码给了我一些Clang版本的警告,但不是所有版本,也不是gcc版本。 这是一个窃听器,还是我遗漏了什么?我在godbolt和版本中收到了的警告,这是一个更大的回购的一部分,但我还无法隔离该版本的故障。 这个相关问题中的例子没有给出警告。 改进(我认为)版本: 这将使Godbolt中的的警告沉默。我想它应该能安全地适用于任何一个functor,任何我遗漏的东西?

  • 下面的SCCE显示了实现接口标记的两个类(B和C)。对于实现Marker的每个类,都有一个实现泛型处理程序接口的对应类(B_处理程序、C_处理程序)。映射用于关联Pair的类类型。其次是它的关联处理程序。代码按预期执行;但是,我得到一个编译时警告: 警告:[未检查]未检查的强制转换处理程序h1=(处理程序)(dispatch.get(p1.second.get类()));需要:处理程序找到:处理程

  • 在PHP7.4.0中,我看到了以下警告: 我的错误/异常处理程序无法捕获并记录它们。 示例: 警告仍显示在正常输出中,并且两个处理程序均未调用。 我想在自己的日志中记录所有错误、异常和警告,但处理程序无法捕获此警告。是否有这样的原因或解决方案来捕获并记录PHP抱怨的所有内容(无法访问服务器Apache/PHP日志)?

  • 我正在使用python处理一些图像,并尝试将一系列大小为961x509的图像转换为MP4电影文件。我已经这样做了,它正在工作,但我有一个相当恼人的问题,警告说这样的话: 警告:根:图像FFMPEG_WRITER警告:输入图像不能被macro_block_size=16整除,大小从(509L,961L)到(512L,976L),以确保与大多数编解码器和播放器的视频兼容性。若要防止调整大小,请使输入图

  • 当用PDFBox加载PDF时,如果PDF错误,则会收到日志级警告: 例如,这可能导致控制台上的以下输出: 显然,pdf在内容流中有一些错误,但它确实加载到中。但是否有可能用PDFBOX以编程方式捕获此警告?是否存在一些属性来告诉您文档加载后的警告? 我试过PDFBox-Preflight,但这会检查PDF/A是否符合,这会导致更多的消息。