2010-02-24 4 views
5

함수에서 발생한 경고 수를 계산해야하는 몇 가지 테스트가 있습니다. 파이썬 2.6이 파이썬 2.4에Python 2.4에서 경고 횟수를 계산하십시오.

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

불행하게도, with를 사용할 수없는 사용, 간단한, 그래서 나는 다른 무엇을 사용할 수 있을까? I 경고의 수가 중요하기 때문에 action='error'try/catch이라는 경고 필터를 사용했는지 단순히 확인하십시오.

답변

6

나는 테스트 코드의 이그나시오 같은 해결 방법, 좀 더 완벽한 예를 제안하려고 했어요
3

당신이 할 수있는 것은 warnings.catch_warnings() 자신의 행동을 복제하는 것입니다. warnings.showwarning의 현재 값을 저장하고 경고를 목록에 저장하는 함수로 바꾼 다음 루틴을 테스트 한 후 목록의 길이를 확인한 다음 warnings.showwarning을 복원하십시오.

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 
:
oldsw = warnings.showwarning 
warnings.showwarning = myshowwarning 
    ... 
self.assertEquals(len(somewarninglist), 2) 
warnings.showwarning = oldsw