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

Python3.x pyserial继承Serial类触发栈溢出致命错误求助

解决串口重连时的栈溢出问题

你碰到的这个栈溢出致命错误,核心原因是用递归方式重新调用endless()函数。Python的调用栈有默认深度限制(一般在1000左右),每触发一次SerialException就会新增一层函数调用栈,几百次之后自然就把栈空间耗光了。

解决方法很简单,把递归改成循环结构,这样整个重连逻辑都会在同一个函数栈帧里执行,不会累积栈层级:

import serial
import time

def endless():
    while True:
        try:
            with serialObjectDerivedFromserial.Serial("/dev/tty/bsp") as bsp:
                # 这里写你原本要执行的操作
                pass
        except serial.SerialException:
            # 通知用户设备未连接
            print("设备未连接,10秒后重试...")
            time.sleep(10)
        except Exception:
            # 处理其他未知错误
            print("发生未知错误...")
            # 可以根据需要选择是否退出循环或继续重试
            break

修改关键点说明:

  • 用while True无限循环替代递归调用,每次异常处理完直接回到循环顶部,重新尝试连接
  • 把原有的try-except逻辑包裹在循环内部,保持原有的异常处理行为,但避免了栈空间的持续占用
  • 把原代码的裸except:改成except Exception:(裸except:会捕获包括KeyboardInterrupt在内的所有异常,可能导致无法正常手动终止程序)

这样修改后,不管重连多少次,都不会再出现栈溢出的问题了。

内容的提问来源于stack exchange,提问作者Klaus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:45