は、より良いテストです:
n = 0
def test_recursion_limit():
def call():
global n
n += 1
call()
try:
call()
except RuntimeError:
print(n)
test_recursion_limit()
あなたはspam.py
に入れて、それを実行すると、それはpython2とのpython3の両方のために998を返す必要があります。これは最初のtest_recursion_limit
フレームのために1つのスタックフレームの長さです。
もしあなたがipythonのようなREPLで動いているなら、すでにいくつかのフレームの中に入っていますので、より少ないカウントが表示されます - 再帰の制限が満たされていないということではなく、REPL自体の実装いくつかのスタックフレーム。
>>> # freshly opened ipython session
>>> import inspect
>>> len(inspect.stack())
10
現在の再帰制限は、sys.getrecursionlimit()
関数を呼び出すことで確認できます。既定値の1000が適切な既定値として選択されています。これは、無限回帰呼び出しを誤って実行したときにシステムリソースを守るための保護手段です。たとえば、カスタムの__getattr__
実装を使用すると非常に簡単です。
スタックを正当に吹き飛ばしていて、制限を増やす必要がある場合は、sys.setrecursionlimit
で変更できます。
出典
2016-10-18 18:53:22
wim
重複:http://stackoverflow.com/questions/3323001/maximum-recursion-depth - これを読んで、あなたが望む答えが得られます。 – Fusseldieb
彼はなぜそこにいるのかと質問しています。それ。なぜ私の結果が979だったのかを知りたいのですが、**なぜMRDがあるのか、それを回避する方法はありません。 –
[docs](https://docs.python.org/2/library/sys.html#sys.getrecursionlimit)を読んだことがありますか? – UnholySheep