Предупреждения количества в Python 2.4

У меня есть некоторые тесты, которые должны считать количество предупреждений повышенным функцией. В Python 2.6 это просто, с помощью

with warnings.catch_warnings(record=True) as warn:
    ...
    self.assertEquals(len(warn), 2)

К сожалению, with не доступно в Python 2.4, поэтому что еще я мог использовать? Я не могу просто проверить, было ли единственное предупреждение (использующий предупреждение фильтра с action='error' и try/catch), потому что количество предупреждений является значительным.

5
задан skaffman 25 March 2010 в 09:58
поделиться

2 ответа

Я собирался предложить тот же обходной путь, что и Игнасио, чуть более полный пример кода тестирования:

import warnings

def setup_warning_catcher():
    """ Wrap warnings.showwarning with code that records warnings. """


    caught_warnings = []
    original_showwarning = warnings.showwarning

    def custom_showwarning(*args,  **kwargs):
        caught_warnings.append(args[0])
        return original_showwarning(*args, **kwargs)

    warnings.showwarning = custom_showwarning
    return caught_warnings


caught_warnings_list = setup_warning_catcher()

# trigger warning here

assert len(caught_warnings_list) == 1
6
ответ дан 14 December 2019 в 01:06
поделиться

Вы можете самостоятельно продублировать поведение warnings.catch_warnings () . Сохраните текущее значение warnings.showwarning и замените его функцией, которая сохраняет предупреждение в списке, затем после стандартного тестирования длины списка и затем восстановите warnings.showwarning .

oldsw = warnings.showwarning
warnings.showwarning = myshowwarning
  ...
self.assertEquals(len(somewarninglist), 2)
warnings.showwarning = oldsw
3
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: