Python3.xPYS系列

2024-07-07 09:00:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个从serial.serial对象继承的对象,并添加了一些方法。在一个无止境的循环中,程序从串行连接中获取信息。当有人关闭另一端的Divice时,SerialException会通知用户有问题并再次调用该函数。在大约300个错误之后,我得到了一个堆栈溢出致命错误

def endless():
 try:
  with serialObjectDerivedFromserial.Serial("/dev/tty/bsp") as bsp:
  #doing somthing
 except serial.SerialException:
  #notify not connected
  time.sleep(10)
  endless()
 except:
  #notify error

Tags: 对象方法函数用户程序堆栈def错误
1条回答
网友
1楼 · 发布于 2024-07-07 09:00:08

您可以从自身调用endless。虽然它不是被禁止的(它是递归的基础),但每次调用都会消耗堆栈中的一点。因此,在多次调用之后出现堆栈溢出也就不足为奇了。正确的方法是将递归更改为迭代处理:

def endless():
  while True:
     try:
      with serialObjectDerivedFromserial.Serial("/dev/tty/bsp") as bsp:
      #doing somthing
     except serial.SerialException:
      #notify not connected
      time.sleep(10)
      continue               # keep on looping on SerialException
     except:
      #notify error
     break                   # exit loop on any other case

相关问题 更多 >