繁体   English   中英

Python:属性错误(NoneType对象没有属性拆分)

[英]Python: Attribute Error(NoneType object has no attribute split)

我试图将一些近似值丢弃。

下面给出的功能是抛出属性错误。 可能是什么问题? 如果可以的话请帮助我。

def calculate_tps(filename,identity):
  ##command='tshark -r %s -R -T pdml diameter'
  first_time = None
  last_time=None
  tshark='tshark -r %s -R \'(diameter.Destination-Host==%s)&& (diameter.CC-Request-Type==3)\' -T pdml'% (filename,identity)
  time = None
  req = 0
  for line in os.popen(tshark, 'r'):
    m=pattern.search(line)    
    if m:
      #print m.group(1)
      if m.group(1) == 'timestamp':
    time=m.group(2)
    if not first_time:
      first_time=time
      elif m.group(1) == 'diameter.Session-Id':
        req +=1 
    if(req % 100) ==0:
      print 'processed 1000 requests req number %s ' % req

  # making some approximations discard ms 
  first = long(first_time.split('.').pop(0))
  last =  long(time.split('.').pop(0))
  time_elapsed = first -last
  print "%s requests in %s seconds, tps = %s " % ( req, time_elapsed, req/time_elapsed)   

这是完整的代码。 我正在尝试使用tshark计算每秒的请求数。

#!/usr/bin/python
import re
import sys
import commands

    import os
    import time


    pattern = re.compile('<field name="(timestamp|diameter.Session-Id)".*value="([^"]+)')


    from optparse import OptionParser
    def parse_options():
      parser = OptionParser()
     # parser.add_option("-f", "--file", dest="filename",
     #                 help="input pcap file", metavar="FILE")
      parser.add_option("-i", "--identity", dest="identity",
                      help="diameter identity to filter on", metavar="IDENTITY")

      opts, args = parser.parse_args()
      return opts, args

    def calculate_tps(filename,identity):
      ##command='tshark -r %s -R -T pdml diameter'
      first_time = None
      last_time=None
      tshark='tshark -r %s -R \'(diameter.Destination-Host==%s)&& (diameter.CC-Request-Type==3)\' -T pdml'% (filename,identity)
      time = None
      req = 0
      for line in os.popen(tshark, 'r'):
        m=pattern.search(line)    
        if m:
          #print m.group(1)
          if m.group(1) == 'timestamp':
        time=m.group(2)
        print 'time is %s' % time
        if not first_time:
          first_time=time
          prin
          elif m.group(1) == 'diameter.Session-Id':
            req +=1 
        if(req % 100) ==0:
          print 'processed 1000 requests req number %s ' % req

      # making some approximations discard ms 
      first = long(first_time.split('.').pop(0))
      last =  long(time.split('.').pop(0))
      time_elapsed = first -last
      print "%s requests in %s seconds, tps = %s " % ( req, time_elapsed,
      req/time_elapsed)       

    def main():
      global options
      options, args = parse_options()
      if len(args) < 1:
        print >>sys.stderr, "missing pcap file.Please specify the pcap"
        sys.exit(1)   
      #print options.identity  



      start_time = time.time()
      calculate_tps(args.pop(0), options.identity) 
      end_time = time.time()
      print 'completed in %s', (end_time - start_time) 

    if __name__ == '__main__':
       main()

当您在此处拨打电话时:

first = long(first_time.split('.').pop(0))
last =  long(time.split('.').pop(0))

您已经假设每个都是字符串。 在您遍历文件内容期间,似乎未重新分配它们,这表明您没有进行匹配。 您可以将它们包装在条件检查中,如下所示:

if None in (first_time, time):
  print "Uh oh, one of first_time or time is None - ", first_time, time

这至少可以为您提供问题的指示器。

这是因为您的第一个和最后一个都不是字符串。 因此,没有类型的属性拆分。 因此,如果需要split属性,最好将它们更改为字符串类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM