每个程序只发出一次警告

2024-04-25 05:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有用户警告的函数:

warnings.warn(message)

我想让它只在第一次遇到消息时显示消息,然后保持沉默

我在文件中找到的最接近的东西是,在程序开始时:

warnings.simplefilter('once', UserWarning)

但它似乎不起作用-我在同一个程序中多次收到相同的警告

我该怎么做


Tags: 文件函数用户程序消息警告messagewarn
1条回答
网友
1楼 · 发布于 2024-04-25 05:24:22

您可以构造一个类来执行并记忆给定的警告:

class WarnOnlyOnce:
    warnings = set()

    @classmethod
    def warn(cls,message):
        # storing int == less memory then storing raw message
        h = hash(message) 
        if h not in cls.warnings:
            # do your warning
            print(f"Warning: {message}")
            cls.warnings.add(h)


WarnOnlyOnce.warn("First warning")
WarnOnlyOnce.warn("First warning")   # skipped - identical spelling
WarnOnlyOnce.warn("Second warning")
WarnOnlyOnce.warn("First warning")   # skipped - identical spelling
WarnOnlyOnce.warn("First warning")   # skipped - identical spelling
WarnOnlyOnce.warn("Last warning")   
WarnOnlyOnce.warn("LAst warning")    # different spelling
WarnOnlyOnce.warn("LASt warning")    # different spelling
WarnOnlyOnce.warn("LAST warning")    # different spelling

输出:

Warning: First warning
Warning: Second warning
Warning: Last warning
Warning: LAst warning
Warning: LASt warning
Warning: LAST warning

相关问题 更多 >