Python ‚NoneType‘ object has no attribute ‚group‘ Fehler: Lösung

f76c6b0013ff4e8794d3ae9e1dcfe1d8

‚NoneType‘ object has no attribute ‚group‘:

‚NoneType‘ object has no attribute ‚group‘: Fehlerursache

Die Fehlermeldung „‚NoneType‘ object has no attribute ‚group'“ tritt oft in Zusammenhang mit einem RegEx auf.

Die Fehlermeldung wird beispielsweise ausgelöst, wenn ein RegEx keinen Treffer landet, keinen Wert zurückgibt. Es wird stattdessen ein sogenannter NoneType (ein „Nichts“) geliefert und ebendieses „Nichts“ macht der „group()“-Methode Probleme, liefert die besagte Fehlermeldung.

Die Methode „group()“ gibt die Zeichenfolge zurück, die dem RegEx entspricht. Ist der gesuchte String in einem Dokument nicht vorhanden, hat der Python-Interpreter ein Problem.

Hilfe bei: ‚NoneType‘ object has no attribute ‚group‘

Niemand mag „Nichts“ – ebenso Python. Der folgende Code erzeugt solch ein „Nichts“, wenn der Regex keinen Match findet, nichts (außer „None“) zurückliefert.

# Amazon-ASIN aus Quelltext filtern	
Data = {}
Data['asin'] = re.search('amazon.de%2Fdp%2F(.+?)%3F', webseite).group(1)
print('ASIN: ', Data['asin'])

In Zeile zwei wird ein Dictionary (Wörterbuch) namens „Data“ angelegt, erkennbar an den geschweiften Klammern. Ein Dictionary ist so etwas wie ein assoziatives Array, eine Liste.

In Zeile drei wird dem Key (Schlüssel) des Wörterbuches das Ergebnis eines RegEx (regulären Ausdrucks) zugeordnet. Es wird in einem Quelltext nach einer sogenannten ASIN gesucht, einer von AMAZON vergebenen eindeutigen Produktnummer.

Der RegEx 'amazon.de%2Fdp%2F(.+?)%3F' sollte diese ASIN finden. Findet der RegEx im Quelltext keinen Treffer, wird „Nichts“ zurückgeliefert, ein NoneWert. Und genau dieses Ergebnis lässt dein Python-Script einen Fehler verursachen und den Dienst quittieren.

Die häufigste Quelle für einen „NoneWert“ ist eine Funktion, die nichts zurückgibt.

Fange den „NoneTyp“ Fehler ab, bevor er entsteht!

Schreibe z.B. eine if-Anweisung.

# ===== Amazon-ASIN im Quelltext suchen	
asin = re.search('amazon.de%2Fdp%2F(.+?)%3F', webseite)	# RegEx
if asin is not None:
    print('<br><b>ASIN</b>',asin.group(1))
else:
  	asin = ''
    print('<br><b>ASIN:</b> Nicht gefunden')

Die Variable „asin“ wird in Zeile 2 mit einem RegEx gefüllt. Wenn „asin“ kein None-Typ ist, wird die „group()“-Methode ausgeführt. Im anderen Fall wird „asin“ mit einem leeren String gefüllt.

Rubrik (deutsch): Tutorial, Anleitung, Fehler, Probleme, Hilfe