如何忽略根警告?

时间:2018-09-04 11:51:27

标签: python warnings python-imageio

我生成单色图像,并使用imageio.imwrite保存它们。每次保存文件时,都会收到以下警告:

WARNING:root:Lossy conversion from float64 to uint8. Range [-0.24890179009891278, 2.35786261304524]. Convert image to uint8 prior to saving to suppress this warning.

我不在乎这种“有损转换”。一切看起来都很好,并且工作正常。

但是,每生成约100张图像,我都会得到不同的警告,我想抓住它们。因此,我想忽略以上内容。

我试图忽略它,但是即使我打电话

import warnings
warnings.simplefilter('ignore')

之前我仍然收到此警告。

3 个答案:

答案 0 :(得分:4)

该库不使用warnings模块。相反,它通过调用顶级logging framework使用logging.warning() function记录一条消息。参见imageio.core.util._precision_warn() function

from logging import warning as warn

# ...

def _precision_warn(p1, p2, extra=""):
    t = (
        "Lossy conversion from {} to {}. {} Convert image to {} prior to "
        "saving to suppress this warning."
    )
    warn(t.format(p1, p2, extra, p2))

这很...不幸,因为您无法使用logging API轻松禁用此功能。最佳做法是为库使用专用的命名记录器。

因此,最好对库进行 patch 否使上述函数成为no-op:

import imageio.core.util

def silence_imageio_warning(*args, **kwargs):
    pass

imageio.core.util._precision_warn = silence_imageio_warning

您还可以使所有日志记录保持沉默,从而调整根记录器的配置。这不是理想的选择,因为您可能想使用自己记录日志或使用性能更好的第三方库。

我已经filed an issue with the project要他们解决他们的伐木故事。

答案 1 :(得分:0)

尝试

warnings.filterwarnings("ignore")

答案 2 :(得分:0)

对此有一个简单的解决方法/解决方案。该库使用的是 logging 模块而不是 warning 模块。可以在代码中包含这些行以抑制任何此类根警告,除非它的严重性级别为 ERROR。

import logging
logging.getLogger().setLevel(logging.ERROR)

如果不是根警告,可以使用以下代码段代替。

import warnings
warnings.filterwarnings("ignore")