Bases & algorithmique · 6 mondes · 18 étapes
Python avancé
Le langage lui-même : texte, compréhensions, objets, erreurs, modules.
Progression
0 %
0/18 étapes terminées
Avancé · 9 min de lecture
Erreurs et exceptions
Échouer proprement, et le dire clairement
1Définition
Une exception interrompt le cours normal du programme. try délimite le risque, except Type traite le cas prévu, finally s'exécute toujours, raise refuse une donnée invalide. Le principe : n'attraper que ce qu'on sait traiter.
2Principes fondamentaux
01
Nommer le type attrapé
except ValueError, jamais except: nu — qui avalerait aussi tes fautes de frappe et l'interruption au clavier.
02
Refuser tôt
Une fonction qui lève une exception sur une donnée absurde évite un résultat faux découvert trois écrans plus loin.
03
Le message est l'interface
« il manque 20 d'énergie » se corrige tout de suite ; « erreur » oblige à rouvrir le code.
04
Des types pour le métier
Une exception personnalisée (class EnergieInsuffisante(Exception)) permet à l'appelant de traiter précisément ce cas, et lui seul.
3Exemples pratiques
Traiter un lot sans jamais s'arrêter
1valides, rejets = [], 02 3for s in saisies:4 try:5 valides.append(int(s))6 except ValueError:7 rejets += 18 9print(valides, rejets)Le motif de tout traitement de données réelles : ce qui passe est gardé, ce qui échoue est compté, le traitement continue.
Exception métier
1class EnergieInsuffisante(Exception):2 pass3 4def travailler(energie, cout):5 if energie < cout:6 raise EnergieInsuffisante(f"il manque {cout - energie}")7 return energie - coutLe type permet un traitement ciblé, le message contient le chiffre exact qui manque.
4Erreurs courantes
Avaler l'erreur
À éviter
try: traiter()except: passÀ faire
try: traiter()except ValueError as e: print("Donnée invalide :", e)Pourquoi : Un except nu qui ne fait rien transforme un bug en comportement silencieux et faux.
Utiliser assert pour valider une saisie
À éviter
assert age > 0À faire
if age <= 0: raise ValueError("âge doit être positif")Pourquoi : Les assertions peuvent être désactivées à l'exécution : elles servent aux hypothèses internes, pas aux données extérieures.
Renvoyer None au lieu de lever
À éviter
def lire(cle): return donnees.get(cle)À faire
def lire(cle): if cle not in donnees: raise KeyError(cle) return donnees[cle]Pourquoi : Un None se propage et casse ailleurs, sans rapport visible avec la cause.
5Subtilités à connaître
- ◆
elseaprès untrys'exécute seulement si aucune exception n'a eu lieu : il évite de mettre du code non risqué dans letry. - ◆
raise ... from econserve l'erreur d'origine dans la trace : précieux quand on convertit une erreur technique en erreur métier. - ◆Un
finallycontenant unreturnécrase la valeur renvoyée par letry: à éviter absolument.
6Vérifie ta compréhension
Question 1/3
Score 0
Quand finally s'exécute-t-il ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.