Выдает предупреждение только один раз за программу - PullRequest
0 голосов
/ 25 октября 2018

У меня есть функция с некоторым предупреждением пользователя:

warnings.warn(message)

Я хочу, чтобы оно отображало сообщение только при первом обнаружении, а затем отключалось.

Самым близким, что я нашел в документации, была проблема при запуске программы:

warnings.simplefilter('once', UserWarning)

Но, похоже, это не работает - я получаю одно и то же предупреждение много раз в одной и той же программе.

Как я могу это сделать?

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете создать класс, который выполняет и запоминает данные предупреждения для вас:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...