logo oujood
🔍

Gestion des exceptions : try, except et finally

En Python, une exception est une erreur détectée pendant l'exécution du programme. Les blocs try/except permettent de l'intercepter et d'y répondre sans interrompre brutalement le programme.

OUJOOD.COM

Structure de base : try et except

Le bloc try contient le code susceptible de provoquer une erreur. Si une exception se produit, Python saute immédiatement au bloc except correspondant. Si aucune exception n'est levée, le bloc except est ignoré.

  📋 Copier le code

def diviser(x, y):
    try:
        resultat = x // y  # division entière
        print("Bien ! La réponse est :", resultat)
    except ZeroDivisionError:
        print("Désolé ! Vous divisez par zéro.")
# Pas d'exception : le bloc try s'exécute normalement
diviser(3, 2)  # Bien ! La réponse est : 1
# Exception ZeroDivisionError : le bloc except prend le relais
diviser(3, 0)  # Désolé ! Vous divisez par zéro.

Si l'exception levée ne correspond à aucun bloc except disponible, elle remonte au niveau supérieur. Si rien ne la capture, Python arrête l'exécution et affiche le message d'erreur.

Le bloc else

Le bloc else s'exécute uniquement si le bloc try s'est déroulé sans exception. Il se place après tous les blocs except. C'est l'endroit logique pour mettre le code qui ne doit tourner que quand tout s'est bien passé.

  📋 Copier le code

def AparB(a, b):
    try:
        c = (a + b) // (a - b)
    except ZeroDivisionError:
        print(f"{a}+{b}/{a}-{b} → division par zéro impossible")
    else:
        print("c =", c)  # exécuté seulement si pas d'exception
AparB(5.0, 3.0)  # c = 4.0
AparB(3.0, 3.0)  # 3.0+3.0/3.0-3.0 → division par zéro impossible

Exceptions multiples

On peut enchaîner plusieurs blocs except pour traiter différents types d'erreurs séparément. Un bloc except sans type d'exception capture tout ce qui n'a pas été intercepté avant.

  📋 Copier le code

try:
    print(x)  # x n'est pas défini → NameError
except NameError:
    print("La variable x n'est pas définie")
except (TypeError, ZeroDivisionError):
    print("Erreur de type ou division par zéro")
except:
    print("Un autre problème est survenu")

Le bloc finally

Le bloc finally s'exécute toujours, qu'une exception ait été levée ou non. Il sert typiquement à libérer des ressources : fermer un fichier, une connexion à une base de données, etc.

  📋 Copier le code

try:
    k = 5 // 0  # ZeroDivisionError
    print(k)
except ZeroDivisionError:
    print("Impossible de diviser par zéro")
finally:
    print("Ceci est toujours exécuté")  # s'exécute dans tous les cas

Lever une exception avec raise

On peut déclencher une exception manuellement avec le mot-clé raise. C'est utile pour valider des données en entrée et signaler explicitement une situation incorrecte.

  📋 Copier le code

# Lever une exception générique si x est négatif
x = -1
if x < 0:
    raise Exception("Pas de nombre inférieur à zéro")

  📋 Copier le code

# Lever une TypeError si x n'est pas un entier
x = "hello"
if not type(x) is int:
    raise TypeError("Seuls les entiers sont autorisés")

On peut spécifier le type d'exception à lever et un message explicite. Ces messages apparaissent dans la traceback Python et aident à diagnostiquer le problème rapidement.

Par carabde | Mis à jour le 24 avril 2026