RuntimeError:超出最大递归深度

时间:2011-01-12 12:01:19

标签: python regex

我有以下代码,通过匹配不同的模式

从文本中提取两个字符串
 def urlChange(self, event):
  text = self.txtUrl.GetValue()
  matches = re.findall('GET (\S+).*Host: (\S+).*Cookie: (.+\S)\s*', text, re.DOTALL or re.MULTILINE)
  if matches:
   groups = matches[0]
   self.txtUrl.SetValue(groups[1] + groups[0])
   self.txtCookie.SetValue(groups[2])
  else:
   matches = re.findall('GET (\S+).*Host: (\S+).*', text, re.DOTALL or re.MULTILINE)
   if matches:
    groups = matches[0]
    self.txtUrl.SetValue(groups[1] + groups[0])
    self.txtCookie.Clear()
   else:
    matches = re.findall('.*(http://\S+)', text, re.DOTALL or re.MULTILINE)
    if matches:
     self.txtUrl.SetValue(matches[0]) 
     matches = re.findall('.*Cookie: (.+\S)', text, re.DOTALL or re.MULTILINE)
     if matches:
      self.txtCookie.SetValue(matches[0])

只有当最后一个re.findall('.*(http://\S+)'...语句运行时,才会收到以下错误消息:

 Traceback (most recent call last):
   File "./curl-gui.py", line 105, in urlChange
  text = self.txtUrl.GetValue()
 RuntimeError: maximum recursion depth exceeded
 Error in sys.excepthook:
 Traceback (most recent call last):
   File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 48, in apport_excepthook
  if not enabled():
   File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 21, in enabled
  import re
 RuntimeError: maximum recursion depth exceeded while calling a Python object

 Original exception was:
 Traceback (most recent call last):
   File "./curl-gui.py", line 105, in urlChange
  text = self.txtUrl.GetValue()
 RuntimeError: maximum recursion depth exceeded

2 个答案:

答案 0 :(得分:2)

这看起来像GUI代码?

如果是这样,我认为只要urlChange发生变化就会调用self.txtUrl。因此,当您调用self.txtUrl.SetValue(matches[0])时,它会触发对urlChange的另一个调用,然后重复调用htis递归限制。

只是一个猜测 - 需要更多的上下文来确定,但这是我在该代码中可以看到的唯一可能的递归行为。

为了解决这个问题,您应该在调用textUrl之前检查SetValue的值以查看它是否发生了变化 - 以防止递归。

答案 1 :(得分:1)

您是否尝试过使用sys.setrecursionlimit()来提高累积限制?默认设置为1000.