import warnings # The warnings module isn't easily tested, because it relies on module # globals to store configuration information. We need to extract the # current settings to avoid bashing them while running tests. _filters = [] _showwarning = None def showwarning(message, category, filename, lineno, file=None): i = filename.find("Lib") filename = filename[i:] print "%s:%s: %s: %s" % (filename, lineno, category.__name__, message) def monkey(): global _filters, _showwarning _filters = warnings.filters[:] _showwarning = warnings.showwarning warnings.showwarning = showwarning def unmonkey(): warnings.filters = _filters[:] warnings.showwarning = _showwarning def test(): for item in warnings.filters: print (item[0], item[1] is None, item[2].__name__, item[3] is None, item[4]) hello = "hello world" for i in range(4): warnings.warn(hello) warnings.warn(hello, UserWarning) warnings.warn(hello, DeprecationWarning) for i in range(3): warnings.warn(hello) warnings.filterwarnings("error", "", Warning, "", 0) try: warnings.warn(hello) except Exception, msg: print "Caught", msg.__class__.__name__ + ":", msg else: print "No exception" warnings.resetwarnings() try: warnings.filterwarnings("booh", "", Warning, "", 0) except Exception, msg: print "Caught", msg.__class__.__name__ + ":", msg else: print "No exception" monkey() test() unmonkey()