2015-06-21 19 views
5

Ich benutze Regex, um bestimmte Inhalte aus einem Suchfeld auf einer Webseite mit selenium.webDriver abzurufen.Python Regex AttributError: 'NoneType' Objekt hat kein Attribut 'Gruppe'

Der Code funktioniert so lange, wie das Suchfeld Ergebnisse liefert, die dem Regex entsprechen. Aber wenn das Suchfeld mit der Zeichenfolge antwortet "No results" ich Fehler:

AttributeError: 'NoneType' object has no attribute 'group'

Wie kann ich das Skript machen behandelt die "No results" Situation?

Antwort

6

Es gelang mir, diese Lösung herauszufinden, es hatte mit der Vernachlässigung zu tun g group() für die Situation, in der die Antwort des Suchfelds "No results" lautet und daher nicht mit der Regex übereinstimmt.

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except AttributeError: 
    searchbox_result = re.match("^.*(?=(\())", searchbox) 

oder einfach:

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except: 
    searchbox_result = None 
3

Wenn Sie das tun

re.match("^.*(?=(\())", search_result.text) 

dann, wenn keine Übereinstimmung gefunden wurde, wird None zurückgegeben werden:

Return None if the string does not match the pattern; note that this is different from a zero-length match.

sollten Sie überprüfen, ob Sie ein Ergebnis bekommen, bevor Sie group auf sie anwenden:

res = re.match("^.*(?=(\())", search_result.text) 
if res: 
    # ... 
+0

Dank, können Sie ein spezifischeres Beispiel für Code geben? Ich will im Grunde, dass es '' '' zu 'res' schreibt, wenn es nichts findet. Oder alternativ "pass", wenn "except" verwendet wird. – Winterflags

+0

@Winterflags Sie können überprüfen, ob "res is None" ist. Wenn ja, ändern Sie es in "" ". – Maroun

+0

@Winterflags Beachten Sie auch, dass Ihre Regex ist gierig, es entspricht "abc (def" in der folgenden Zeichenfolge 'abc (def.'? Ist das was Sie wollen? – Maroun

Verwandte Themen