python 可以抛出 "stack overflow" 错误吗?
Can python throw a "stack overflow" error?
python 会出现 stack overflow
错误吗?
最近,当我遇到这个问题时,我只是在胡思乱想:“python 可以得到 stack overflow
错误吗?有人有任何答案吗?
我搜索了答案,但只找到了 java 个答案。我用过 java 但这不是我的问题:
- What is a WhosebugError?
- 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
这是由于堆栈溢出造成的。
python 会出现 stack overflow
错误吗?
最近,当我遇到这个问题时,我只是在胡思乱想:“python 可以得到 stack overflow
错误吗?有人有任何答案吗?
我搜索了答案,但只找到了 java 个答案。我用过 java 但这不是我的问题:
- What is a WhosebugError?
- 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
这是由于堆栈溢出造成的。