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() для ее циклирования и сброса реестра для всех вызовов.

  • Излучение Cythonic предупреждений?
  • 'недопустимое значение, обнаруженное в предупреждении double_scalars, возможно, numpy
  • Как перенаправить предупреждения python в пользовательский поток?
  • Как игнорировать предупреждения об отказе в Python
  • Должен ли я делать тихие исключения громче в tkinter?
  • Как вы исправляете уже загруженные пользователем UserWarnings в Python?
  • Pandas SettingWithCopyWarning
  • Как получить предупреждения.warn выпустить предупреждение и не игнорировать строку?
  •  
    Interesting Posts for Van-Lav

    (Еще один) Список Aliasing Conundrum

    Переменный поиск: почему ** с переменными намного медленнее, чем со значениями

    Печать всех значений заданного ключа словарей в списке

    Отображение правильного имени funcName при использовании функции логгера в пользовательском классе

    Конечные разностные функции на языке Python?

    байтовый обратный AB CD на CD AB с питоном

    «Метод не разрешен» в функции python для колбы

    Как я могу открыть файлы UTF-16 на Python 2.x?

    webapp2, Jinja2: как вырезать большой html-файл в несколько html-файлов

    объединение двух отсортированных связанных списков в один связанный список в python

    Я новичок в python, я не могу сказать, будет ли это работать или нет

    Перенос Django 1.7 не воссоздает упавшую таблицу, почему?

    Эллипсы при преобразовании списка массивов numpy в строку в python 3

    Захват вывода в скрипт python из другого скрипта python с подпроцессом

    Атрибут Mongoengine creation_time в документе

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