CodeGym /Cours /Python SELF FR /Journalisation et gestion des erreurs pour un script plus...

Journalisation et gestion des erreurs pour un script plus robuste

Python SELF FR
Niveau 38 , Leçon 0
Disponible

1. Journalisation

Aujourd'hui, on plonge dans un sujet qui pourrait vraiment te sauver beaucoup de temps et de stress : la journalisation et la gestion des erreurs. Même les devs les plus expérimentés ne sont pas à l'abri des erreurs, et ton objectif est de rendre ces erreurs prévisibles et contrôlables. Imagine que tu es un archéologue en expédition, et que ton travail est de protéger ton équipe des éboulements inattendus et des pièges sournois — la journalisation et la gestion des erreurs seront ton compas et ton bouclier dans cette mission périlleuse !

Quand on parle de journalisation en développement, on fait référence au processus d'enregistrement d'infos sur l'exécution d'un programme. Ces processus restent souvent invisibles à première vue. En écrivant des logs, tu laisses des indices pour toi-même, à la manière de Hansel et Gretel laissant des miettes de pain dans la forêt pour retrouver leur chemin.

Configurer et utiliser la journalisation

Commençons par les outils de base en Python. Pour la journalisation, on utilise le module intégré logging. C'est ton couteau suisse pour enregistrer des infos sur le fonctionnement de ton programme.

Python

import logging

# Configuration de la journalisation
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Exemple d'utilisation
logging.info("Début de l'exécution du script")
logging.error("C'est une erreur")

        

Quels sont les niveaux de journalisation ?

  • DEBUG : les infos les plus détaillées, généralement utiles uniquement pour déboguer.
  • INFO : confirme que les processus fonctionnent comme prévu.
  • WARNING : indique quelque chose d'inattendu et potentiellement problématique, mais le programme continue de fonctionner.
  • ERROR : seules les erreurs sérieuses provoquant une interruption de l'exécution d'une fonction.

Tu peux configurer le niveau de journalisation pour filtrer les infos. Par exemple, si tu veux uniquement les erreurs et les avertissements, mets le niveau logging.WARNING.

Exemple de journalisation avec Selenium

Voyons comment la journalisation peut être utilisée dans un projet avec Selenium :

Python

from selenium import webdriver

# Configuration de la journalisation
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    logging.info("Initialisation du driver Chrome")
    driver = webdriver.Chrome()
    logging.info("Ouverture de la page Python.org")
    driver.get("https://www.python.org")
    logging.info("Exécution terminée avec succès")
except Exception as e:
    logging.error(f"Une erreur est survenue : {e}")
finally:
    driver.quit()

        

Cet exemple montre comment intégrer la journalisation dans un script Selenium pour suivre son exécution. On utilise try, except et finally pour gérer les erreurs — on en parlera plus en détail dans la section suivante.

2. Gestion des erreurs dans Selenium

En programmation, comme dans la vie, les erreurs sont inévitables. Mais on peut contrôler comment y réagir. Utiliser try, except, else et finally permet d'intercepter et de gérer les erreurs avec élégance.

Rappel sur la gestion des exceptions

Un petit rappel sur comment fonctionne la gestion des exceptions :

Python

try:
    # Code qui peut provoquer une exception
    result = 10 / 0
except ZeroDivisionError as e:
    # Code exécuté si une exception ZeroDivisionError est levée
    logging.error("Division par zéro impossible !")
else:
    # Code exécuté si aucune exception n'est levée
    logging.info("Opération réussie")
finally:
    # Code exécuté quoi qu'il arrive
    logging.info("Fin des opérations")

        

Le code dans le bloc try sera exécuté. Si une erreur de type ZeroDivisionError survient, le code dans le bloc except sera exécuté, et le programme ne plantera pas. Le bloc else est utilisé pour exécuter du code si aucune exception n'a été levée. Enfin, le bloc finally est toujours exécuté, qu'il y ait une erreur ou non.

Gestion des erreurs dans Selenium

Selenium fournit une série d'exceptions intégrées pour gérer diverses situations. Voici quelques exceptions utiles et comment les utiliser.

  1. NoSuchElementException — levée si un élément n'est pas trouvé. Utilise-la pour vérifier la disponibilité des éléments.
    Python
    
    try:
        element = driver.find_element(By.ID, "element_id")
    except NoSuchElementException:
        logging.warning("Élément avec l'ID 'element_id' introuvable.")
    
                    
  2. TimeoutException — levée si un élément attendu n'apparaît pas sur la page dans le délai imparti. Elle est utile pour gérer les attentes.
    Python
    
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "element_id"))
        )
    except TimeoutException:
        logging.error("L'attente de l'élément avec l'ID 'element_id' a échoué.")
    
                    
  3. ElementClickInterceptedException — levée si un élément est bloqué par un autre élément et que le clic est impossible. Utile pour des éléments masqués par des pop-ups.
    Python
    
    from selenium.common.exceptions import ElementClickInterceptedException
    
    try:
        driver.find_element(By.ID, "button_id").click()
    except ElementClickInterceptedException:
        logging.warning("L'élément est bloqué et ne peut pas être cliqué.")
    
                    

Réessais et logique de récupération

Pour rendre ton script plus robuste, tu peux implémenter un mécanisme de réessais en cas d'échec. Par exemple, si un site est temporairement indisponible ou si un élément est introuvable, le script peut réessayer plusieurs fois avant de signaler une erreur.

Python

import time

def retry_find_element(driver, by, value, retries=3):
    attempt = 0
    while attempt < retries:
        try:
            element = driver.find_element(by, value)
            logging.info(f"Élément trouvé : {value}")
            return element
        except NoSuchElementException:
            attempt += 1
            logging.warning(f"Tentative {attempt} échouée, nouvel essai dans 2 secondes...")
            time.sleep(2)
    logging.error(f"Élément introuvable après {retries} tentatives.")
    return None

        

Conseils pour des scripts robustes et fiables

  • Utilise des attentes explicites : Configure des attentes explicites pour les éléments qui ne sont pas immédiatement disponibles. Cela réduira les erreurs dues aux délais de chargement.
  • Implémente des blocs try-except à chaque étape : Cela permet de journaliser les erreurs et d'éviter l'interruption du script en cas d'échec mineur.
  • Effectue des réessais pour les étapes critiques : Si une erreur peut être temporaire, configure des réessais avec des intervalles de quelques secondes.
  • Journalise chaque étape : La journalisation de chaque étape clé aide à analyser l'exécution du script et à détecter les erreurs cachées.
  • Configure des alertes pour les erreurs critiques : Par exemple, envoie un e-mail ou un message dans un chat si une erreur critique est enregistrée dans les logs.

3. Tirer parti des logs

Maintenant qu'on sait journaliser et gérer les erreurs, voyons comment tirer le maximum de tes logs.

Choix de l'emplacement et du format des logs

Utilise un fichier pour stocker les logs si tu veux les analyser plus tard. C'est comme tenir un journal que tu peux relire et analyser pour éviter des erreurs à l'avenir. Configurons la journalisation pour écrire dans un fichier :

Python

logging.basicConfig(filename='app.log', filemode='w', level=logging.INFO)

# Maintenant tous les logs seront sauvegardés dans app.log
logging.info("Début de la journalisation dans le fichier.")

        

Analyse des logs

Analyse tes logs pour identifier les erreurs fréquentes ou les problèmes de performance. Peut-être que ton script rencontre des soucis uniquement certains jours ou heures, et cela peut être remarqué uniquement par une analyse détaillée des logs. Cette analyse est ton processus d'investigation personnelle pour mieux comprendre comment ton application fonctionne.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION