Kodokon kodokon.com

Erreurs et exceptions : try, except, raise

Interceptez les échecs prévisibles avec try/except/else/finally et levez vos propres exceptions pour signaler les données invalides.

9 min · 3 questions

Ouvrir cette leçon dans Kodokon

Un programme réel échoue : fichier absent, saisie invalide, réseau coupé. Python signale ces situations avec des exceptions, qui interrompent l'exécution et remontent la pile d'appels jusqu'à ce qu'un try/except les intercepte. Le réflexe professionnel : capturez l'exception la plus précise possible, au plus près de l'endroit où vous savez quoi faire.

PYTHON
def parse_age(text):
    try:
        return int(text)
    except ValueError:
        return None

print(parse_age("34"))      # 34
print(parse_age("trente"))  # None
On capture ValueError précisément, pas toutes les erreurs.

Le bloc complet compte quatre branches. try contient le code risqué, except traite l'échec, else s'exécute uniquement si aucune exception n'a été levée, et finally s'exécute dans tous les cas - idéal pour libérer une ressource ou journaliser. L'intérêt d'else : garder le try minimal, pour voir d'un coup d'œil quelle ligne peut échouer.

PYTHON
values = ["10", "abc", "25"]
total = 0

for value in values:
    try:
        number = int(value)
    except ValueError:
        print(f"Ignore : {value}")
    else:
        total += number
    finally:
        print(f"Traite : {value}")

print(total)  # 35
else ne s'exécute que sans erreur ; finally s'exécute toujours.

Vos fonctions peuvent aussi lever leurs propres exceptions avec raise, dès qu'une donnée reçue est invalide : mieux vaut échouer immédiatement avec un message clair que produire un résultat faux. Définissez une classe dédiée héritant d'Exception : l'appelant pourra la capturer spécifiquement, sans intercepter les autres erreurs par accident.

PYTHON
class EmptyCartError(Exception):
    pass

def checkout(items):
    if not items:
        raise EmptyCartError("Panier vide.")
    return round(sum(items), 2)

try:
    print(checkout([]))
except EmptyCartError as error:
    print(f"Erreur : {error}")
Une exception métier dédiée rend l'échec explicite et ciblé.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Quand le bloc else d'un try/except s'exécute-t-il ?
    • Uniquement si aucune exception n'a été levée dans le try
    • Uniquement si une exception a été capturée
    • Dans tous les cas, après le try
  2. Dans quels cas le bloc finally s'exécute-t-il ?
    • Seulement si une exception a été levée
    • Seulement si aucune exception n'a été levée
    • Dans tous les cas, exception ou non
  3. Pourquoi éviter un except: nu qui capture tout ?
    • Il masque les vrais bugs et rend le débogage très difficile
    • Il est plus lent qu'un except ciblé
    • Il ne fonctionne qu'avec les exceptions de la bibliothèque standard