2016-05-13 5 views
0

ich hundert Zeilen von Daten wie diese:‚list‘ Objekt hat kein Attribut ‚Streifen‘

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 

ich eine durch Komma getrennte Zeichenfolge von Werten erhalten mag, die nach Zeichenfolge sind „Patch:“ ie " 148077-01,148407-01,148683-01 ...“

ich einen Code geschrieben haben, aber Fehler erhalte ich‚Liste "Objekt hat kein Attribut‚Streifen‘‘

Unten ist mein Code Bitte helfen Sie:

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 
+4

Es gibt keinen Aufruf von 'strip()' in dem Code, den Sie gepostet haben. –

+1

Ich glaube, er meinte "Split"? –

+0

Ist "output" eine mehrzeilige Zeichenfolge oder eine Liste von einzeiligen Zeichenfolgen? –

Antwort

0

Es gibt mehrere Probleme mit dem Code:

  • Der reguläre Ausdruck ist falsch (Kolon zweimal angegeben, zum Beispiel)
  • PatchId-None initialisiert, aber nie zu None
  • output unnötig initialisiert verwendet
  • finalOutput ist nicht wirklich eine Zeichenfolge, es ist ein Objekt, und es könnte sein None
  • Sie wurden appe nden die Stringliteral 'outString' den endgültigen Ausgang und dass Anfügen außerhalb des geschieht for-Schleife

, die mit im Auge ist, hier der Code, den ich diese Probleme behoben. Beachten Sie, wie die Patch-ID aus matched extrahiert wird, das Ergebnis des Abgleichs regulärer Ausdrücke.

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 
0

Ich kann einige Fehler in Ihrem Code sehen.

  • Sie Anfügen der Zeichenfolge 'outString' auf Ihrer Liste finalOutput anstelle des Wertes von outString.

  • Der von re.match() zurückgegebene Wert ist kein String, sondern ein Match Objekt. Um die von Ihrem Regex erfasste Gruppe zu erhalten, rufen Sie outString.group(1) an (group(0) enthält die ursprüngliche Zeichenfolge).

  • Ihr Regex-Muster hat zwei Doppelpunkte.

  • Die Einrückung für finalOutput.append() scheint falsch. Sie fügen nur den Wert outString hinzu, wie es in der letzten Iteration Ihrer Schleife for ist.

Ich glaube, Ihr Code etwa wie folgt aussehen:

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 

Dies ist nicht direkt dem Fehler Ihrer bekommen, kann aber die Ursache für sie woanders in Ihrem Code.

Verwandte Themen