import unittest import sys import gc def foo(): try: raise RuntimeError("foo 1") except RuntimeError: raise ValueError("foo 2") class TestCase(unittest.TestCase): def test_foo(self): context = self.assertRaises(ValueError) with context: foo() # debug code if sys.version_info[:2] >= (3, 2): print("--------------------------") e1 = context.exception print(gc.get_referents(e1)) print(repr(e1.__context__)) e2 = e1.__context__ print(gc.get_referents(e2)) print(repr(e2.__traceback__)) print("--------------------------") def test_main(): gc.disable() gc.set_debug(gc.DEBUG_LEAK) try: unittest.main() finally: print("===========================") gc.collect() print("===========================") if __name__ == '__main__': test_main()