web-dev-qa-db-fra.com

Python regex AttributeError: l'objet 'NoneType' n'a pas d'attribut 'group'

J'utilise Regex pour récupérer certains contenus d'une boîte de recherche sur une page Web avec Selenium.webDriver.

searchbox = driver.find_element_by_class_name("searchbox")
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group()

Le code fonctionne tant que la zone de recherche renvoie des résultats qui correspondent à l'expression régulière. Mais si le champ de recherche répond avec la chaîne "No results" J'obtiens une erreur:

AttributeError: l'objet 'NoneType' n'a pas d'attribut 'group'

Comment puis-je faire en sorte que le script gère le "No results" situation?

7
Winterflags

J'ai réussi à comprendre cette solution, il s'agissait de négliger group() pour la situation où la réponse du champ de recherche est "No results" et ne correspond donc pas au Regex.

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

ou simplement:

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

Quand tu fais

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

alors si aucune correspondance n'a été trouvée, None sera retourné:

Renvoie None si la chaîne ne correspond pas au modèle; notez que ceci est différent d'une correspondance de longueur nulle.

Vous devez vérifier que vous avez obtenu un résultat avant d'appliquer group dessus:

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