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
- try…except
- raise Exception
- try…finally
- Exceptions intégrées courantes
- 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.