Introduction
Dans tout programme informatique, des erreurs peuvent survenir, que ce soit à cause d'une entrée utilisateur inattendue, d'un fichier manquant ou d'une connexion réseau défaillante. En Python, la gestion des erreurs est essentielle pour garantir que votre programme continue à fonctionner même lorsque des problèmes se produisent. Cela permet également de fournir des messages d'erreur explicites à l'utilisateur. Python utilise les blocs try
, except
, et finally
pour capturer et gérer les erreurs de manière élégante et contrôlée.
Dans cet article, nous allons découvrir comment utiliser ces instructions pour anticiper et gérer les exceptions en Python.
1. Qu'est-ce qu'une exception en Python ?
Une exception est une erreur détectée lors de l'exécution du programme. Contrairement à une erreur de syntaxe, qui empêche l'exécution d'un programme, une exception survient pendant que le programme fonctionne.
Exemples d'exceptions courantes :
ZeroDivisionError
: Division par zéro.FileNotFoundError
: Fichier introuvable.TypeError
: Incompatibilité de types (ex. additionner un nombre et une chaîne).ValueError
: Valeur incorrecte (ex. tenter de convertir une chaîne en nombre).
Si ces exceptions ne sont pas traitées, elles peuvent faire planter le programme. C'est là que la gestion des erreurs devient cruciale.
2. Utilisation du bloc try
et except
Le bloc try
est utilisé pour tester un morceau de code susceptible de générer une erreur. Si une exception est levée, elle est capturée par le bloc except
, ce qui permet de gérer l'erreur sans arrêter le programme.
Syntaxe :
try:
# Code susceptible de lever une exception
except TypeDeLException as e:
# Bloc exécuté si l'exception se produit
print(e)
Exemple simple :
try:
resultat = 10 / 0
except ZeroDivisionError:
print("Erreur : Division par zéro")
Dans cet exemple, Python essaie de diviser 10 par 0 dans le bloc try
. Comme cela lève une exception ZeroDivisionError
, le bloc except
est exécuté et affiche le message d'erreur.
3. Gérer plusieurs exceptions
Vous pouvez gérer plusieurs types d'exceptions en utilisant plusieurs blocs except
.
Exemple :
try:
nombre = int(input("Entrez un nombre : "))
resultat = 10 / nombre
except ValueError:
print("Erreur : Veuillez entrer un nombre valide.")
except ZeroDivisionError:
print("Erreur : Division par zéro.")
Dans cet exemple, nous gérons deux types d'erreurs : ValueError
si l'utilisateur entre une valeur non numérique et ZeroDivisionError
si l'utilisateur entre zéro.
4. L'instruction finally
Le bloc finally
est exécuté qu'une exception soit levée ou non. Il est utilisé pour exécuter du code qui doit toujours s'exécuter, comme fermer un fichier ou libérer des ressources.
Syntaxe :
try:
# Code susceptible de lever une exception
except TypeDeLException:
# Gérer l'exception
finally:
# Code qui s'exécute toujours
Exemple avec finally
:
try:
fichier = open("test.txt", "r")
contenu = fichier.read()
except FileNotFoundError:
print("Erreur : Fichier introuvable.")
finally:
print("Cette instruction s'exécute toujours.")
Dans cet exemple, le fichier n’existe peut-être pas, mais le message dans le bloc finally
s’affiche dans tous les cas. Le bloc finally
est souvent utilisé pour s’assurer que des fichiers sont fermés ou que des connexions à des bases de données sont terminées proprement.
5. Lever des exceptions personnalisées avec raise
Python permet également de lever des exceptions manuellement en utilisant l'instruction raise
. Cela peut être utile pour indiquer qu'une condition spécifique a été rencontrée dans votre programme.
Exemple de levée d'une exception personnalisée :
def verifier_age(age):
if age < 18:
raise ValueError("L'âge doit être au moins de 18 ans.")
return "Âge valide"
try:
verifier_age(16)
except ValueError as e:
print(e) # Affiche "L'âge doit être au moins de 18 ans."
Dans cet exemple, la fonction verifier_age
lève une exception ValueError
si l’âge est inférieur à 18, et cette exception est capturée par le bloc except
.
6. Combiner try
, except
, else
, et finally
Python permet aussi d'utiliser l'instruction else
avec les blocs try
. Le bloc else
est exécuté uniquement si aucune exception n'est levée dans le bloc try
.
Syntaxe :
try:
# Code susceptible de lever une exception
except TypeDeLException:
# Gérer l'exception
else:
# S'exécute si aucune exception n'est levée
finally:
# S'exécute toujours
Exemple complet :
try:
nombre = int(input("Entrez un nombre : "))
resultat = 10 / nombre
except ZeroDivisionError:
print("Erreur : Division par zéro.")
except ValueError:
print("Erreur : Veuillez entrer un nombre valide.")
else:
print(f"Le résultat est {resultat}.")
finally:
print("Fin de l'opération.")
Dans cet exemple, si aucune erreur ne se produit, le bloc else
s'exécute. Quoi qu'il arrive, le bloc finally
s'exécute pour garantir la fin de l'opération.
Conclusion
La gestion des erreurs en Python avec try
, except
, et finally
est essentielle pour écrire du code robuste et fiable. Ces blocs permettent de traiter les exceptions de manière contrôlée, de prévenir les plantages, et d'exécuter des actions essentielles même en cas de problème. En comprenant comment utiliser ces structures, vous pouvez écrire des programmes qui réagissent intelligemment aux erreurs et qui continuent de fonctionner en toute sécurité.