【问题标题】:Issue a warning only once per program每个程序仅发出一次警告
【发布时间】:2018-10-25 11:33:32
【问题描述】:

我有一个带有一些用户警告的功能:

warnings.warn(message)

我想让它只在第一次遇到它时显示消息,然后变成静音。

我在文档中找到的最接近的内容是在程序开始时发出:

warnings.simplefilter('once', UserWarning)

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

我该怎么做?

【问题讨论】:

  • message 每次都完全相同吗?

标签: python python-3.x warnings


【解决方案1】:

您可以构建一个类来为您执行并记住给定的警告:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2020-03-19
    • 2018-10-30
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多