# -*- coding: utf-8 -*- def retry(fun, args, max_nb_tries, nb_tries = 0): try: return fun(*args) except Exception as exception: nb_tries = nb_tries + 1 if nb_tries >= max_nb_tries: print fun, args, max_nb_tries raise exception return retry(fun, args, max_nb_tries, nb_tries) if __name__ == "__main__": def test_fun_0(value): global global_value return global_value + 1 global_value = 0 assert 1 == retry(test_fun_0, [1], 5) def test_fun_1(value): global global_value global_value = global_value + 1 assert False, "info" global_value = 0 try: retry(test_fun_1, [1], 5) except Exception as exception: assert exception.args == ("info",) assert global_value == 5, global_value def test_fun_2(value_1, value_2): global global_value global_value = global_value + 1 assert False, "info" global_value = 0 try: retry(test_fun_2, [1, 2], 5) except Exception as exception: assert exception.args == ("info",) assert global_value == 5, global_value