2010-02-24 1 views
5

У меня есть несколько тестов, которые необходимо подсчитать количество предупреждений, поднятых функцией. В Python 2.6 это просто, используяПредупреждения о подсчете в Python 2.4

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

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

ответ

6

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

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 
3

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

oldsw = warnings.showwarning 
warnings.showwarning = myshowwarning 
    ... 
self.assertEquals(len(somewarninglist), 2) 
warnings.showwarning = oldsw 

 Смежные вопросы

  • Нет связанных вопросов^_^