python 可以抛出 "stack overflow" 错误吗?

Can python throw a "stack overflow" error?

python 会出现 stack overflow 错误吗?
最近,当我遇到这个问题时,我只是在胡思乱想:“python 可以得到 stack overflow 错误吗?有人有任何答案吗?

我搜索了答案,但只找到了 java 个答案。我用过 java 但这不是我的问题:

  1. What is a WhosebugError?
  2. https://rollbar.com/blog/how-to-fix-java-lang-Whosebugerror-in-java/

我的推理
我最初认为不,因为 python 只是......大部分时间都有效(比如为字符串传递一个 int)。它也没有堆栈(据我所知)。但我不确定。我来了。

你可以,如果你的递归限制太高:

def foo():
    return foo()


>>> foo()

结果:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  .......
  File "<stdin>", line 2, in foo
RuntimeError: maximum recursion depth exceeded
>>> 

默认递归限制为10**3(可通过sys.getrecursionlimit验证),但您可以使用[=15=进行更改]:

import sys
sys.setrecursionlimit(10**8)

def foo():
    foo()

但这样做可能很危险——标准限制有点保守,但 Python 堆栈框架可能会很大。

默认情况下,Python的递归限制是10**3,理论上如果你通过这个就会得到一个RecursionError.

您甚至可以使用 setrecursionlimit() 来减少递归限制,以更快地实现这一点。

当然可以

以下代码将导致段错误:

import sys
sys.setrecursionlimit(10_000_000)

def foo():
    foo()

在 Mac OS 上,抛出:

Segmentation fault: 11

这是由于堆栈溢出造成的。