実行しているファイルの関数に問題があります。IndexError
通常は生成することが期待されます。
しかし、N
以下のように定義なる十分に大きな誤差がされない図示し抑制するように思われます。なぜこれが起こっているのか知りたいのですが。エラーがスローされないのはなぜですか?
from collections import Counter
from sys import setrecursionlimit
def correct(events: list, lens: list=[]):
counts = Counter(events).values()
present = []
while events[0] not in present:
present.append(events.pop(0))
lens.append(len(present))
correct(events, lens)
if __name__ == '__main__':
N = 50000 # enough in my case, increase if the problem does not occur
setrecursionlimit(10000)
result = correct([711321] * N)
PowerShellを介してWindows10でファイルを実行しています。ファイルの実行後、出力は生成されません。それにもかかわらず、その戻りステータス$?
はFalse
であり、実行に問題があることを示しています。
このコードをPythonシェルで実行すると、強制的に閉じられることに注意してください。
これは、sys.setrecursionlimitが再帰制限(インタープリタースタックの最大深度)を最大でシステムの再帰制限に設定するためです。これは、sys.getrecursionlimitで取得できます。実際には、CPythonインタープリターは、制限を指定した値よりもいくらか大きく設定します。これは、再帰的な制限を超えた場合、クリーンアップ関数が入り、再帰するためにスタックが必要になるためです。
高くしすぎると、可能な限り高い制限がプラットフォームに依存するため、オーバーフローのクリーンアップ中にインタープリターがオーバーフローし、インタープリターが致命的なエラーで終了します(インタープリターはエラーで終了します。 code) "Py_FatalError("スタックオーバーフローから回復できません。 ");"。また、インタプリタが終了するため、エラーメッセージは出力されません。
if (tstate->overflowed) {
if (tstate->recursion_depth > recursion_limit + 50) {
/* Overflowing while handling an overflow. Give up. */
Py_FatalError("Cannot recover from stack overflow.");
}
return 0;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加