Home > Software design >  Can python throw a "stack overflow" error?
Can python throw a "stack overflow" error?

Time:10-27

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:

  1. What is a StackOverflowError?
  2. 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.

  • Related