异常未在多处理中捕获

时间:2016-12-23 06:26:49

标签: python exception multiprocessing

我正在使用多处理模块并行进行文件处理,几乎每次都能正常工作。 我也在try中写过,除了块以捕获任何异常。 我遇到过除了块没有捕获异常的情况。

由于代码很大,我只是把相关的块放到了问题上。

  def reader(que, ip, start, end, filename):
  """ Reader function checks each line of the file
  and if the line contains any of the ip addresses which are
  being scanned, then it writes to its buffer.
  If the line field doesn't match date string it skips the line.
  """

  logging.info("Processing :   %s" % os.path.basename(filename))
  ip_pat = re.compile("(\d+\.\d+\.\d+\.\d+\:\d+)")
  chunk = 10000000 # taking chunk of 10MB data

  buff = ""
  with bz2.BZ2File(filename,"rb", chunk) as fh: # open the compressed file
      for line in fh:
          output = []
          fields = line.split()
          try:
              ts = fields[1].strip() + "/" +fields[0]+"/"+fields[3].split("-")[0]+" "+fields[2]
              times = da.datetime.strptime(ts,"%d/%b/%Y %H:%M:%S")
              if times < start:
                  continue
              if times > end:
                  break
              ips = re.findall(ip_pat,line)
              if len(ips) < 3:
                  continue
              if ips[0].split(":")[0] == ip:
                  output.append(times.strftime("%d/%m/%Y %H:%M:%S"))
                  status = "SESSION_OPEN" if "SESSION_OPEN" in line or "CREATE" in line else "SESSION_CLOSE"
                  protocol = "TCP" if "TCP" in line else "UDP"
                  output.append(status)
                  output.append(protocol)
                  ips[1], ips[2] = ips[2], ips[1]
                  output.extend(ips)
                  res = "|".join(output)
                  buff += res + "\n"
          except IndexError, ValueError:
              continue
  logging.info("Processed  :   %s of size [ %d ]" % (os.path.basename(filename), os.path.getsize(filename)))
  if buff:
    que.put((ip,buff))
  return buff

这就是错误收到的内容。

文件“/usr/lib64/python2.7/multiprocessing/pool.py”,第554行,在get中     提高self._value ValueError:时间数据'2 / Dec / 20 10:59:59'与格式'%d /%b /%Y%H:%M:%S'不匹配

我不明白为什么没有捕获异常,我在块中提到了ValueError。

解决这个问题的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

将多个异常作为元组提供:

except (IndexError, ValueError):
          continue

相关文档为https://docs.python.org/2/tutorial/errors.html#handling-exceptions

页面摘录:

  

请注意,这个元组周围的括号是必需的,因为除了ValueError之外,e:是在现代Python(如下所述)中用于通常写为除了ValueError之外的语法的语法。仍然支持旧语法以实现向后兼容性。这意味着除了RuntimeError之外,TypeError不等同于except(RuntimeError,TypeError):但是除了RunErrorError之外还有TypeError:这不是你想要的。