0

我生成单色图像并使用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')

事先我仍然收到此警告。

4

2 回答 2

7

该库不使用该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))

这……很不幸,因为您无法使用loggingAPI 轻松禁用它。最佳实践是为库使用专用的命名记录器。

因此,最好修补库 no 使上述函数成为空操作:

import imageio.core.util

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

imageio.core.util._precision_warn = silence_imageio_warning

您还可以静默所有日志记录,调整根记录器上的配置。这并不理想,因为您可能希望自己使用日志记录或使用表现更好的第三方库。

我已经向该项目提交了一个问题,要求他们修复他们的日志记录故事。

于 2018-09-04T11:59:44.803 回答
1

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

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

如果它不是根警告,则可以改用以下代码段。

import warnings
warnings.filterwarnings("ignore")
于 2021-06-09T12:28:40.457 回答