'list'对象没有属性'strip'

时间:2016-05-13 12:24:44

标签: python

我有数百行数据,如下所示:

Patch: 148077-01 Obsoletes:  Requires: 120011-14 Incompatibles:  Packages: SUNWcsr
Patch: 148407-01 Obsoletes:  Requires: 144500-19 Incompatibles:  Packages: SUNWcsr, SUNWcsu
Patch: 148683-01 Obsoletes:  Requires: 120011-14 Incompatibles:  Packages: SUNWcsr
Patch: 148948-01 Obsoletes:  Requires: 118833-36, 127127-11 Incompatibles:  Packages: SUNWcsr
Patch: 121061-01 Obsoletes:  Requires:  Incompatibles:  Packages: SUNWcsr
Patch: 150435-01 Obsoletes:  Requires:  Incompatibles:  Packages: SUNWcsr
Patch: 149171-02 Obsoletes: 148407-01 Requires: 118833-36, 137137-09, 144500-19 

我想得到一个逗号分隔的值字符串,它们位于字符串“Patch:”之后,即“148077-01,148407-01,148683-01 ......”

我写了一段代码,但是我收到错误“'list'对象没有属性'strip'”

以下是我的代码,请帮助:

def getPatchId(self):
    PatchId = None

    output = None
    finalOutput = []
    output = self.client.execCmd('showrev -p | grep SUNWcsr')

    if output:
        for line in output.split('\n'):
            outString = re.match(r".*?Patch:\:\s+([^\s]+)", line)

        finalOutput.append('outString')

        return finalOutput 

2 个答案:

答案 0 :(得分:0)

您的代码存在以下问题:

  • 正则表达式错误(冒号指定两次,例如)
  • PatchId已初始化为None,但从未使用过
  • output不必要地初始化为None
  • finalOutput实际上不是字符串,它是一个对象,可能是None
  • 您将字符串文字'outString'附加到最终输出,并且附加发生在for循环之外

考虑到这一点,这里是修复这些问题的代码。请注意补丁ID是如何从matched中提取的,这是正则表达式匹配的结果。

def getPatchId(self):
    patch_ids = []
    for line in output.split('\n'):
        matched = re.match(r"Patch:\s+([^\s]+)", line)
        if matched is not None:
            patch_ids.append(matched.groups()[0])

    return patch_ids

答案 1 :(得分:0)

我可以在您的代码中看到一些错误。

  • 您将字符串'outString'附加到列表finalOutput而不是outString的值。

  • re.match()返回的值不是字符串,而是Match对象。要让您的正则表达式捕获该组,您应该致电outString.group(1)group(0)保留原始字符串)。

  • 你的正则表达式有两个冒号。

  • finalOutput.append()的缩进似乎有误。您只需在outString循环的最后一次迭代中附加for的值。

我相信您的代码应如下所示:

def getPatchId():
    output = None
    finalOutput = []
    output = self.client.execCmd('showrev -p | grep SUNWcsr')

    if output:
        for line in output.split('\n'):
            outString = re.match(r".*?Patch\:\s+([^\s]+)", line)

            finalOutput.append(outString.group(1))

        return finalOutput

这不会对您收到的错误负直接的责任,但可能是您代码中其他地方的错误原因。