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.
One warning you may encounter in Python is: RuntimeWarning: overflow encountered in exp. This warning occurs when you use the NumPy exp function, but use a value that is too large for it to handle.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With