import sys from test.libregrtest import refleak from test.libregrtest.cmdline import Namespace def test_recursion_in_except_handler(): def set_relative_recursion_limit(n): depth = 1 while True: try: sys.setrecursionlimit(depth) except RecursionError: depth += 1 else: break sys.setrecursionlimit(depth+n) def recurse_in_body_and_except(): try: recurse_in_body_and_except() except RecursionError as e: recurse_in_body_and_except() recursionlimit = sys.getrecursionlimit() try: set_relative_recursion_limit(5) try: recurse_in_body_and_except() except RecursionError as e: pass finally: sys.setrecursionlimit(recursionlimit) def test_no_hang_on_context_chain_cycle2(): class A(Exception): pass class B(Exception): pass try: try: raise A() except A as _a: a = _a try: raise B() except B as _b: b = _b raise b except B: pass def run_test(): test_no_hang_on_context_chain_cycle2() test_recursion_in_except_handler() def main(): ns = Namespace() ns.huntrleaks = (3, 3, 'tt_out.py') done = False i = 1 while not done: print(f'-- {i} --') done = refleak.dash_R(ns, 'test', run_test) i += 1 if __name__ == '__main__': main()