Python Tutorials

Maîtriser la gestion des exceptions en Python

Spread the love

La gestion des exceptions est un composant crucial d’une programmation Python robuste. Elle permet de gérer élégamment les erreurs qui pourraient survenir pendant l’exécution du programme, empêchant les plantages et fournissant aux utilisateurs un retour d’information pertinent. Ce tutoriel explore les concepts fondamentaux de la gestion des exceptions en Python.

Table des matières

  1. try…except
  2. raise Exception
  3. try…finally
  4. Exceptions intégrées courantes
  5. Création d’exceptions personnalisées

1. try…except

Le bloc try...except est le fondement de la gestion des exceptions. Le code susceptible de lever une exception est placé dans le bloc try. Si une exception se produit, le bloc except correspondant est exécuté.


try:
    result = 10 / 0  # Ceci lèvera une ZeroDivisionError
except ZeroDivisionError:
    print("Erreur : Division par zéro !")
except TypeError:
    print("Erreur : Incompatibilité de type")
except Exception as e:  # Attrape toute autre exception
    print(f"Une erreur inattendue s'est produite : {e}")
else:  # Bloc else optionnel, s'exécute si aucune exception ne se produit
    print(f"Résultat : {result}")
finally:  # Bloc finally optionnel, s'exécute toujours
    print("Ceci s'exécute toujours.")

Cet exemple montre comment gérer une ZeroDivisionError. Plusieurs blocs except peuvent gérer différents types d’exceptions. Le bloc else optionnel s’exécute uniquement si aucune exception ne se produit dans le bloc try. Le bloc finally, également optionnel, s’exécute toujours, idéal pour les tâches de nettoyage comme la fermeture de fichiers.

2. raise Exception

L’instruction raise permet de lever explicitement des exceptions, signalant des erreurs ou des conditions exceptionnelles.


def valider_age(age):
    if age < 0:
        raise ValueError("L'âge ne peut pas être négatif")
    elif age > 120:
        raise ValueError("L'âge est irréaliste")
    return age

try:
    age = valider_age(-5)
    print(f"Âge valide : {age}")
except ValueError as e:
    print(f"Erreur : {e}")

Ici, valider_age lève une ValueError si l’âge est invalide. Vous pouvez lever n’importe quelle exception intégrée ou en créer des personnalisées (des classes héritant de Exception).

3. try…finally

Le bloc finally garantit que le code qu’il contient s’exécute toujours, quelles que soient les exceptions. Il est essentiel pour le nettoyage.


fichier = None
try:
    fichier = open("my_file.txt", "r")
    contenu = fichier.read()
    print(contenu)
except FileNotFoundError:
    print("Fichier introuvable !")
finally:
    if fichier:
        fichier.close()
    print("Fichier fermé.")

Ceci garantit que le fichier est fermé même si une FileNotFoundError se produit, empêchant les fuites de ressources.

4. Exceptions intégrées courantes

Python offre de nombreuses exceptions intégrées :

  • ZeroDivisionError : Division par zéro.
  • TypeError : Type inapproprié pour une opération.
  • ValueError : Type correct, valeur inappropriée.
  • FileNotFoundError : Fichier introuvable.
  • IndexError : Index hors limites.
  • KeyError : Clé introuvable dans un dictionnaire.
  • ImportError : Échec de l’importation.
  • NameError : Nom introuvable.

5. Création d’exceptions personnalisées

Pour une gestion des erreurs plus spécifique, créez des exceptions personnalisées en sous-classant la classe Exception :


class InvalidInputError(Exception):
    pass

def traiter_donnees(donnees):
    if not donnees:
        raise InvalidInputError("Les données ne peuvent pas être vides")
    # ...reste du traitement des données...

try:
    traiter_donnees("")
except InvalidInputError as e:
    print(f"Erreur personnalisée : {e}")

Ceci permet une gestion des erreurs plus granulaire et une meilleure lisibilité du code.

Une gestion efficace des exceptions est essentielle pour écrire des programmes Python robustes et fiables. En anticipant et en gérant élégamment les erreurs potentielles, vous créez des applications plus robustes et conviviales.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *