Python是否会抛出stack overflow栈溢出错误?
Python会出现
stack overflow错误 首先明确纠正两个常见认知误区:
- Python的运行时容错性和栈溢出没有关联,前者是动态类型语言的类型处理特性,后者是函数调用栈的内存限制问题,二者互不影响
- Python存在明确的调用栈结构,解释器会为每一次函数调用创建独立栈帧并压入调用栈,函数执行完毕后栈帧弹出,不存在"没有栈结构"的情况
Python的栈溢出通常有两种表现:
- 纯Python代码层面的栈溢出
绝大多数场景由过深的递归调用触发,Python默认设置了递归深度限制(通常为1000左右,可通过sys.getrecursionlimit()查看当前值),当调用栈深度超过限制时,会抛出RecursionError,本质就是Python解释器封装后的栈溢出错误。
示例代码可以直接复现:
def test_recursion(): test_recursion() test_recursion()
运行后会输出:RecursionError: maximum recursion depth exceeded
- 底层场景的原生栈溢出
如果调用C/C++编写的Python扩展模块,扩展内部的函数调用不受Python递归深度限制管控,如果调用栈过深,会直接触发系统级栈溢出,导致Python解释器直接崩溃,不会抛出Python层面的异常。
内容的提问来源于stack exchange,提问作者a1cd
相关产品推荐
相关产品推荐

