股票

wx.EVT_CLOSE: RuntimeError: maximum recursion depth exceeded in cmp

由于需要在关闭窗口时自动关掉打开的串口,所以在wx.Frame初始化时调用了 wx.EVT_CLOSE方法:

  1. self.Bind(wx.EVT_CLOSEself.OnCloseWindow, self)

函数实现为:

  1. def OnCloseWindow(self, evt):
  2.     if self.serialFd != None:
  3.         self.serialFd.close()
  4.         self.serialFd=None
  5.     print “RAETestFrame exit”
  6.     self.Close()
  7.     self.Destroy()

但是,在使用的时候,总是会报出这个错误:RuntimeError: maximum recursion depth exceeded in cmp,

打印输出函数也是一大串。这里面,self.Close()是之前在使用按钮或者菜单关闭窗口的时候调用的函数,直接搬来了;self.Destroy()是窗口关闭函数,不然点了X窗口没有反应。今天尝试着把self.Close()屏蔽掉,发现居然正常了!原来self.Close()函数执行是,就是调用关闭事件wx.EVT_CLOSE,也就是右上角的X,如果在函数实现中再加入self.Close,就会造成自身递归调用,深度溢出,上报溢出错误了。

打赏
原文链接:,转发请注明来源!

发表评论