Exercice 93 / 100

Gestion d'erreurs

ConsigneGère les exceptions avec try/except/finally

📖 Cours

Gestion d'erreurs avancée : try / except / else / finally pour structurer la logique des cas normaux vs erreurs.

Forme complète

try: # code à risqueexcept TypeErreur1: # gestion erreur 1except (TypeErreur2, TypeErreur3): # gestion erreurs 2 ou 3else: # exécuté UNIQUEMENT si pas d'erreur dans tryfinally: # exécuté TOUJOURS (erreur ou pas, return ou pas)
Les quatre blocs ne tournent pas dans les mêmes cas : except attend qu'une erreur sorte, else attend qu'il n'y en ait aucune, et finally tourne dans tous les cas, même après un return
Les quatre blocs ne tournent pas dans les mêmes cas : except attend qu'une erreur sorte, else attend qu'il n'y en ait aucune, et finally tourne dans tous les cas, même après un return

Utilité de else

- séparer le code "normal" du code à risque- distinguer "pas d'erreur" d'un succès apparent

Utilité de finally

- cleanup (fermer un fichier, une connexion DB)- exécution garantie même si return depuis try

Exemple : division sécurisée

def safe_divide(a, b): try: result = a / b except ZeroDivisionError: print('Erreur: division par zéro') return None except TypeError: print('Erreur: types invalides') return None else: print(f'{a}/{b} = {result}') return result finally: print('Opération terminée')
safe_divide(10, 3)safe_divide(10, 0)safe_divide('a', 3)

Pattern : valeur par défaut en cas d'erreur

def parse_int(s): try: return int(s) except (ValueError, TypeError): return 0
print([parse_int(x) for x in ['42', 'abc', '7', None]])# → [42, 0, 7, 0]

Relancer une exception

try: ...except ValueError as e: print('Logging:', e) raise # relance l'exception telle quelle
raise ValueError('message personnalisé') # déclencher manuellement

Bonnes pratiques

✅ attraper UNIQUEMENT les exceptions attendues✅ message clair✅ logger l'erreur (avec contexte) avant de l'avaler
❌ except: vide → masque tous les bugs❌ except Exception: → trop large❌ silencer une erreur sans rien faire

Règle eafp (Easier to Ask Forgiveness than Permission) : en Python, on tente l'action et on gère l'erreur, plutôt que de vérifier d'abord. Plus pythonique, et évite les race conditions.

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →