【问题标题】:Issue a warning only once per program每个程序仅发出一次警告
【发布时间】:2018-10-25 11:33:32
【问题描述】:
我有一个带有一些用户警告的功能:
warnings.warn(message)
我想让它只在第一次遇到它时显示消息,然后变成静音。
我在文档中找到的最接近的内容是在程序开始时发出:
warnings.simplefilter('once', UserWarning)
但它似乎不起作用 - 我在同一个程序中多次收到相同的警告。
我该怎么做?
【问题讨论】:
标签:
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