python中的len(list)返回1而不是0

时间:2013-04-29 07:52:04

标签: python glassfish-3

我们正在尝试计算glassfish中的实例。当使用len()函数时,它总是返回1而不是0.也许它用空格或其他东西填充列表[0]。这是我们的代码。

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(self.get('hostname'),int(self.get('port')),self.get('username'),allow_agent=True)
    #try:
    stdin, stdout, stderr = ssh.exec_command('~/glassfish3/glassfish/bin/asadmin list-instances')
    result = stdout.readlines()
    #except Exception, e:
    #   return MonitoringResult(MonitoringResult.OK,'all instances up!')
    result = "".join(result)
    #line = re.compile(r'\bnot\s\D*\n')

    #rline = "".join(line.findall((result)))
    line2=re.compile(r'\bnot')
    rline2 = ";".join(line2.findall((result)))
    print(rline2)
    i = 0
    listr = rline2.split(";")

    while(i < (len(listr)):
        i+=1
    print(i)

    if rline2:
        return MonitoringResult(MonitoringResult.CRITICAL,'instance down')
    else:
        return MonitoringResult(MonitoringResult.OK, 'All instances are up')

1 个答案:

答案 0 :(得分:6)

str.split 的结果不能为空list

>>> ''.split(';')
['']

如果要检查获得的列表是否包含any非空字符串,请使用any

>>> any(''.split(';'))
False
>>> any('a;'.split(';'))
True
>>> ';'.split(';')
['', '']
>>> any(';'.split(';'))
False

如果您想filter出空字符串,请使用filter

>>> filter(None, ';'.split(';'))
[]

或列表理解:

>>> [s for s in ';'.split(';') if s]
[]

我刚刚意识到str.split 可以返回一个空列表。但是在没有参数的情况下调用时只有

>>> ''.split()
[]
>>> '    '.split()   #white space string
[]

解释在文档中:

  

S.split([sep [,maxsplit]]) -> list of strings

     

返回字符串S中的单词列表,使用sep作为   分隔符字符串。如果给出maxsplit,则最多maxsplit次分割   完成。如果未指定sepNone,则为任何空格   string是一个分隔符,并从中删除空字符串   结果