处理递归限制时处理Python崩溃

问题描述 投票:0回答:2

想象一下这段代码:

def a():
    try:
        a()
    except RecursionError:
        a()
a()

看起来该代码片段会递归且无限地运行

a
函数。 但真正发生的事情是:

  1. 创建递归错误
  2. 处理异常,因为你可以处理每一个异常
  3. 重复做同样的事情 结果: python 崩溃并崩溃(这是我所知的任何方式都无法处理的,因为这不会引发错误,它崩溃 python 解释器

任何人都可以看到它引发了什么异常:

Fatal Python error: _Py_CheckRecursiveCall: Cannot recover from stack overflow.
Python runtime state: initialized

Current thread 0x00007f2e14fca180 (most recent call first):  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 5 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  File "<stdin>", line 3 in a
  ...
Aborted (core dumped)
python recursion exception crash crash-dumps
2个回答
0
投票

为什么不增加系统递归限制呢?

import sys
sys.setrecursionlimit(1000000000)

0
投票

对于 python 3.10+,代码不再使解释器崩溃,只是挂起它(这是预期的行为),但我在 changelog 中找不到任何有关它的信息。我发现的与递归相关的唯一更改是 bpo-41936

© www.soinside.com 2019 - 2024. All rights reserved.