Count warnings in Python 2.4
Question: I've got some tests that need to count the number of warnings raised by a
function. In Python 2.6 this is simple, using

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

Unfortunately, `with` is not available in Python 2.4, so what else could I
use? I _can't_ simply check if there's been a single warning (using warning
filter with `action='error'` and `try`/`catch`), because the number of
warnings is significant.


Answer: I was going to suggest the same workaround as Ignacio, a bit more complete
example of testing code:

    
    
    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
    

