donn wrote: > On 28/08/2010 12:03, Peter Otten wrote: >> But be warned that if you set the limit too high instead of giving you a >> RuntimeError your program will segfault. > Silly question: is there any way to tell the future in this case? I > mean, ask for X recursion limit, and catch an error (or something) if > that won't fly.
I don't think it's a silly question, and I don't think there is an exact answer, even for a given platform. You'll want to stay well below the number calculated by the following script: import os import subprocess SCRIPT = "tmp_check.py" def ok(n): return subprocess.call(["python", SCRIPT, str(n)]) == 0 if __name__ == "__main__": if not os.path.exists(SCRIPT): with open(SCRIPT, "w") as out: out.write("""\ import sys def f(): return f() if __name__ == "__main__": n = int(sys.argv[1]) sys.setrecursionlimit(n) try: f() except RuntimeError: pass """) low = 1000 while True: new_low = 2*low if not ok(new_low): high = new_low break low = new_low while high - low > 1: mid = (low + high) // 2 if ok(mid): low = mid else: high = mid print "max recursion limit", low, high BTW, I didn't expect it but I get different results on different runs. Peter -- http://mail.python.org/mailman/listinfo/python-list