如何忽略根警告?

Fal*_*art 0 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.
Run Code Online (Sandbox Code Playgroud)

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

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

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

import warnings
warnings.simplefilter('ignore')
Run Code Online (Sandbox Code Playgroud)

事先我仍然收到此警告。

Mar*_*ers 5

该库不使用该warnings模块。相反,它通过调用顶级函数使用logging框架记录消息。见功能logging.warning()imageio.core.util._precision_warn()

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))
Run Code Online (Sandbox Code Playgroud)

这是...不幸的是,您无法使用loggingAPI 轻松禁用此功能。最佳实践是对库使用专用的命名记录器。

因此,最好对库进行修补,以使上述功能不起作用:

import imageio.core.util

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

imageio.core.util._precision_warn = silence_imageio_warning
Run Code Online (Sandbox Code Playgroud)

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

对该项目提出了一个问题,要求他们修复其记录问题。