Python-Regex "- Objekt hat kein Attribut"
Ich habe zusammen eine Liste von Seiten, die wir brauchen, um zu aktualisieren, mit neuen Inhalten (wir sind Wechsel-media-Formate). In dem Prozess, den ich bin Katalogisierung Seiten, die korrekt haben die neuen Inhalte.
Hier ist die Allgemeine Vorstellung von dem, was ich Tue:
- Durchlaufen eine Datei-Struktur und erhalten eine Liste von Dateien
- Für jede Datei zu Lesen, um einen Puffer und mit Hilfe von regex-Suche, einem bestimmten tag
- Wenn abgestimmt, test 2 weitere regex-matches
- schreiben die daraus resultierenden Spiele (das eine oder andere) in eine Datenbank
Alles funktioniert gut, bis der 3. regex-Muster passen, wo bekomme ich die folgenden:
'NoneType' object has no attribute 'group'
# only interested in embeded content
pattern = "(<embed .*?</embed>)"
# matches content pointing to our old root
pattern2 = 'data="(http://.*?/media/.*?")'
# matches content pointing to our new root
pattern3 = 'data="(http://.*?/content/.*?")'
matches = re.findall(pattern, filebuffer)
for match in matches:
if len(match) > 0:
urla = re.search(pattern2, match)
if urla.group(1) is not None:
print filename, urla.group(1)
urlb = re.search(pattern3, match)
if urlb.group(1) is not None:
print filename, urlb.group(1)
danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Ausnahme bedeutet, dass urla hat den Wert None. Da urla Wert ist bestimmt durch die re.Suche nach Aufruf, es folgt, dass re.Suche gibt Keine. Und dies geschieht, wenn die Zeichenfolge nicht dem Muster entsprechen.
Also im Grunde Sie verwenden sollten:
anstelle von dem, was Sie jetzt haben.
Den Grund für
TypeError
ist, dasssearch
odermatch
meist wieder entweder eineMatchObject
oder eineNone
. Nur einer von Ihnen hat einegroup
Methode. Und es ist nicht einNone
. Damit Sie tun müssen:P. S. PEP-8 schlägt mit 4 Leerzeichen für die Einrückung. Es ist nicht nur eine Meinung, es ist eine gute Praxis. Dein code ist ziemlich schwer zu Lesen.
Ich hab das gleiche problem.
Mit python2.6 lösen Sie es auf diese Weise:
Bitte notieren Sie sich auch die irrige Annahme, dass der Fehler in der Dritten match, wenn es war in der Tat in der zweiten. Dies scheint zu haben, führte zu der irrigen Annahme, dass das zweite match war etwas zu entkräften, das Dritte, das senden Sie Weg von der Spur.