import unittest class TestCase(unittest.TestCase): def testTracing(self): def f1(cb): return cb() def f2(): return f1(f2) #call myself and go past the recursion limit def pass_call(): pass class Tracer(object): def __init__(self): self.trace = 0 def trace_func(self, frame, event, arg): self.trace += 1 return self.trace_func tracer = Tracer() import sys sys.settrace(tracer.trace_func) try: initial = tracer.trace pass_call() self.assertEqual(3, tracer.trace - initial) try: f2() except RuntimeError as e: self.assert_('recursion' in str(e)) else: self.fail('Expected recursion error!') initial = tracer.trace pass_call() self.assertEqual(3, tracer.trace - initial) finally: sys.settrace(None) if __name__ == '__main__': unittest.main()