Gestion d'erreurs avancée : try / except / else / finally pour structurer la logique des cas normaux vs erreurs.
try:
# code à risque
except TypeErreur1:
# gestion erreur 1
except (TypeErreur2, TypeErreur3):
# gestion erreurs 2 ou 3
else:
# exécuté UNIQUEMENT si pas d'erreur dans try
finally:
# exécuté TOUJOURS (erreur ou pas, return ou pas)Utilité de else
- séparer le code "normal" du code à risque
- distinguer "pas d'erreur" d'un succès apparentUtilité de finally
- cleanup (fermer un fichier, une connexion DB)
- exécution garantie même si return depuis trydef 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)def parse_int(s):
try:
return int(s)
except (ValueError, TypeError):
return 0print([parse_int(x) for x in ['42', 'abc', '7', None]])
# → [42, 0, 7, 0]try:
...
except ValueError as e:
print('Logging:', e)
raise # relance l'exception telle quelleraise ValueError('message personnalisé') # déclencher manuellement✅ 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 faireRè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 →