Python – снова показывает «один раз» предупреждения (сброс всех предупреждающих реестров)

есть способ сбросить __warningregistry__ всех загруженных функций сразу?

Я бы хотел, чтобы все предупреждения, которые были отфильтрованы с помощью фильтра «один раз», отображались снова. Я не нашел способа сделать это, кроме вызова <func>.__globals__['__warningregistry__'].clear() для каждой загруженной функции (включая те, которые являются частью импортированного модуля).

Итак, я хочу что-то вроде функции warnings.clear() чтобы сделать следующее:

 >>> import warnings >>> warnings.warn('blah') WARNING:root:blah ->UserWarning at ... >>> warnings.warn('blah') >>> warnings.clear() >>> warnings.warn('blah') WARNING:root:blah ->UserWarning at ... 

И я хочу, чтобы эта функция warnings.clear() также очищала все предупреждения , а не только текущее пространство имен.

Это уже существует? Возможно, я пропустил что-то очевидное или неправильно использовал модуль?

2 Solutions collect form web for “Python – снова показывает «один раз» предупреждения (сброс всех предупреждающих реестров)”

Эта функциональность, похоже, не существует в Python напрямую.

Тем не менее, мне нужна была аналогичная функциональность для unittests моих собственных библиотек, а также был создан менеджер контекста, который поддерживает состояние реестра предупреждения для всего процесса, очищает его и восстанавливает после завершения контекста.

Это слишком долго, чтобы публиковать здесь, но я представил его в качестве потенциальной отправной точки для решения ошибки python 21724 , поэтому вы сможете скачивать и использовать ее непосредственно из http://bugs.python.org/file40031/ reset_warning_registry.py

Используется следующее:

 from reset_warning_registry import reset_warning_registry with reset_warning_registry(): ... do things with clear registry ... # alternately, to just clear the warnings w/o restoring reset_warning_registry().__enter__() 

Я не считаю, что эта функциональность существует, по крайней мере, не в 2.7.6. Я просмотрел предупреждения.py и _warnings.c, и я не нашел ничего, что можно было бы использовать для этого.

Я думал, возможно, вы могли бы обернуть модуль и переопределить вызов warn() чтобы поместить globals () ['__ warningregistry__'] в список и добавить новую функцию clear() для ее циклирования и сброса реестра для всех вызовов.

  • 'недопустимое значение, обнаруженное в предупреждении double_scalars, возможно, numpy
  • Как перенаправить предупреждения python в пользовательский поток?
  • Как получить предупреждения.warn выпустить предупреждение и не игнорировать строку?
  • Python: печать только сообщений о предупреждениях
  • Как подавить PEP440Warning от setup.py?
  • Парамико: «FutureWarning: режим CTR требует параметра счетчика»
  • Как полностью сбросить предупреждения
  • Предупреждение Python Eyed3
  • Pythonic, пользовательские предупреждения
  • Должен ли я делать тихие исключения громче в tkinter?
  • Как я могу выяснить и получить доступ к подклассам предупреждения pandas?
  •  
    Interesting Posts for Van-Lav

    Нормализовать столбцы кадра данных pandas

    Как обрабатывать всплывающие окна для проверки подлинности в Robot Framework RIDE?

    Как математически вычитать элементы в двух списках на Python и выводить только те элементы, которые соответствуют условию?

    Python: импорт подпакета или подмодуля

    Как скопировать первые 100 файлов из каталога тысяч файлов с помощью python?

    Вставить аудио, видео в графический интерфейс Python

    Почему python использует два символа подчеркивания для определенных вещей?

    Вычисление частоты столбцов объектов DataFrameGroupBy (pandas)

    Создание черновика сообщения в Gmail с помощью imaplib в Python

    Сравнение результатов от статмоделей ARIMA с исходными данными

    Получение IP-адреса запроса с помощью Pyramid

    Как создать API POST (ReST) в платформе Robot с помощью

    Python: прочитайте несколько json-файлов из папки

    mod_wsgi: обновить код через Inotify – не каждые N секунд

    setup.py для пакетов, которые зависят как от cython, так и от f2py

    Python - лучший язык программирования в мире.