Can python have a stack overflow
error?
Recently I was just letting my mind wander when I came across the question: "can python get the stack overflow
error? Does anyone have any answers?
I searched for the answer but only found java answers. I have used java but its just not my question:
- What is a StackOverflowError?
- https://rollbar.com/blog/how-to-fix-java-lang-stackoverflowerror-in-java/
My Reasoning
I initially thought no because python just... works most of the time (like passing an int for a string). It also doesn't have stacks (to my knowledge). But I wasn't sure. Here I am.
CodePudding user response:
Sure it can
the following code will create a Segmentation fault
, python's stack overflow
import sys
sys.setrecursionlimit(10_000_000)
def foo():
foo()
On Mac OS, this throws:
Segmentation fault: 11
Which is caused by a stack overflow.
CodePudding user response:
You can, if your recursion limit is too high:
def foo():
return foo()
>>> foo()
Result:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
.......
File "<stdin>", line 2, in foo
RuntimeError: maximum recursion depth exceeded
>>>
The default recursion limit is 10**3
(verifiable via sys.getrecursionlimit
), but you can change it using sys.setrecursionlimit
:
import sys
sys.setrecursionlimit(10**8)
def foo():
foo()
but doing so could be dangerous: the standard limit is a little conservative, but Python stackframes can be quite big.
CodePudding user response:
By default, Python's recursion limit is 10**3, theoretically if you were to pass this then you would be given a RecursionError
.
You can even reduce the recursion limit using setrecursionlimit()
to make this happen more quickly.