You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python运行特殊递归代码时会直接崩溃而非抛出栈错误?

代码崩溃原理说明

你提供的崩溃复现代码如下:

def Recursion():
    try:
        raise RecursionError()
    except RecursionError:
        Recursion()

Recursion()

核心原因可以拆解为以下几点:

  • Python解释器默认设置了递归深度阈值(默认值通常在1000左右),正常递归调用超过阈值时,解释器会主动抛出RecursionError,这是Python层面做的防护逻辑,避免触发底层栈溢出。
  • 这段代码的特殊逻辑刚好绕开了Python的防护机制:当递归深度刚好触达阈值时,解释器抛出RecursionError,但这个异常立刻被except代码块捕获,你在异常捕获分支中没有做栈释放操作,直接再次发起递归调用。
  • 此时栈帧还没有被回收,新的递归调用会让栈深度直接超过Python解释器可以处理的安全上限,触发底层C实现层面的栈溢出,操作系统会直接终止Python进程,没有给解释器抛出上层异常的机会,因此你看不到Python层面的栈错误提示,只会看到进程直接崩溃。

你可以通过修改代码验证这个逻辑:在except分支中打印当前递归深度,会看到日志输出到接近默认递归深度阈值时,进程直接终止,没有异常抛出。

内容的提问来源于stack exchange,提问作者python-coder12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:54:04