
Le bloc try : exécuter du code potentiellement problématique
Apprenez à utiliser le bloc 'try' en Python pour exécuter du code susceptible de lever des exceptions. Découvrez comment anticiper et gérer les erreurs potentielles pour rendre vos programmes plus robustes.
Pourquoi utiliser un bloc try ? Anticiper les erreurs
En programmation, il est courant de rencontrer des situations où une erreur peut se produire lors de l'exécution du code. Par exemple :
- Un fichier que vous essayez d'ouvrir n'existe pas.
- Un utilisateur entre une donnée invalide (par exemple, du texte au lieu d'un nombre).
- Une division par zéro est tentée.
- Une connexion réseau est interrompue.
- Une clé n'existe pas dans un dictionnaire.
Si vous n'anticipez pas ces erreurs, votre programme plantera (s'arrêtera brutalement) avec un message d'erreur (une exception non gérée).
Le bloc `try` permet d'exécuter du code *en anticipant* le fait qu'une exception pourrait être levée. Si une exception se produit, le bloc `try` est interrompu, et le contrôle est transféré à un bloc `except` (voir section suivante) qui permet de gérer l'erreur.
Syntaxe du bloc try : le code sous surveillance
La syntaxe de base d'un bloc `try` est la suivante :
try:
# Bloc de code à exécuter
# Ce code est susceptible de lever une exception
# ...Le bloc `try` contient le code que vous voulez exécuter et qui est susceptible de lever une exception. Ce code est "sous surveillance".
L'indentation est essentielle : elle délimite le bloc de code à l'intérieur du `try`.
Un bloc `try` doit toujours être suivi d'au moins un bloc `except`, `else`, ou `finally` (voir sections suivantes).
Fonctionnement du bloc try : interruption en cas d'exception
Lorsque Python exécute un bloc `try` :
- Il commence par exécuter le code à l'intérieur du bloc `try`.
- Si *aucune* exception ne se produit pendant l'exécution du bloc `try`, le bloc `try` se termine normalement, et l'exécution se poursuit après les blocs `except`, `else`, et `finally` (s'il y en a).
- Si *une* exception se produit pendant l'exécution du bloc `try`, l'exécution du bloc `try` est *immédiatement interrompue*. Python recherche alors un bloc `except` correspondant au type de l'exception (voir section suivante). Le code restant dans le bloc `try` (après l'endroit où l'exception s'est produite) n'est *pas* exécuté.
Exemple (sans exception) :
try:
print("Début du bloc try")
x = 10 / 2 # Pas d'erreur ici
print("Fin du bloc try")
except ZeroDivisionError:
print("Division par zéro !")
print("Après le bloc try/except")Résultat :
Début du bloc try
Fin du bloc try
Après le bloc try/exceptExemple (avec exception) :
try:
print("Début du bloc try")
x = 10 / 0 # Division par zéro ! Lève une ZeroDivisionError
print("Fin du bloc try") # Cette ligne ne sera PAS exécutée
except ZeroDivisionError:
print("Division par zéro !")
print("Après le bloc try/except")Résultat :
Début du bloc try
Division par zéro !
Après le bloc try/exceptDans le deuxième exemple, la ligne `print("Fin du bloc try")` n'est jamais exécutée, car l'exception `ZeroDivisionError` interrompt le bloc `try`.
Exemple concret : lecture d'une donnée utilisateur
Un cas d'utilisation courant du bloc `try` est la lecture et la validation de données entrées par l'utilisateur.
Exemple :
try:
age = int(input("Entrez votre âge : "))
print(f"Vous avez {age} ans.")
except ValueError:
print("Erreur : vous devez entrer un nombre entier.")Dans cet exemple :
- Le bloc `try` contient le code qui peut lever une exception : l'appel à `int()` pour convertir l'entrée utilisateur en entier.
- Si l'utilisateur entre autre chose qu'un nombre entier (par exemple, "abc"), la fonction `int()` lèvera une `ValueError`.
- Sans le bloc `try`, le programme planterait avec une `ValueError`. Avec le bloc `try`, l'exception est interceptée et un message d'erreur plus convivial est affiché.
Bonnes pratiques
Quelques bonnes pratiques pour l'utilisation du bloc `try`:
- Ne mettez dans le bloc `try` que le code *strictement nécessaire* : Le bloc `try` doit contenir le moins de code possible, uniquement le code qui est susceptible de lever l'exception que vous voulez gérer. Cela rend le code plus clair et évite de masquer d'autres erreurs potentielles.
- Soyez spécifique dans les exceptions que vous capturez : Evitez d'utiliser un bloc `except` générique (sans spécifier de type d'exception). Capturez uniquement les exceptions que vous savez gérer. (Voir section suivante sur `except`).
- Ne masquez pas les erreurs : Le but du bloc `try` n'est pas de masquer les erreurs, mais de les gérer de manière appropriée. Si vous ne savez pas comment gérer une exception, il est souvent préférable de la laisser se propager.