try / except
try / except intercepte une erreur prévisible (valeur illisible, clé absente, division par zéro) pour la traiter au lieu d'arrêter le programme. Ne capturez que les erreurs que vous savez gérer.
- erreur
- exception
- ValueError
- raise
- finally
- else
Syntaxe
try: ...except (ValueError, KeyError) as e: ...else: ... # seulement si aucune exceptionfinally: ... # dans tous les casraise NouvelleErreur("message") from eExemple
import csvimport iosource = io.StringIO("""eleve;noteAna;14Bob;absChloé;17""")notes, rejets = [], []for ligne in csv.DictReader(source, delimiter=";"): try: note = int(ligne["note"]) except ValueError: rejets.append(ligne["eleve"]) else: notes.append(note)print(notes, rejets) # → [14, 17] ['Bob']def lire_note(texte): try: return int(texte) except ValueError as e: raise ValueError(f"Note illisible : {texte!r}") from etry: lire_note("12,5")except ValueError as e: print(e, "| cause :", type(e.__cause__).__name__) # → Note illisible : '12,5' | cause : ValueErrorÀ retenir
- Le bloc else ne s'exécute que si aucune exception n'a été levée : gardez dans try la seule ligne qui peut échouer, et la suite du traitement dans else.
- finally s'exécute dans tous les cas, erreur ou non : on y libère une ressource (connexion, verrou) quand with n'est pas disponible.
- Piège : except nu (except:) ou except Exception qui avale tout. Ils masquent vos fautes de frappe (NameError) et les erreurs inattendues ; capturez le type précis et, si vous devez vraiment tout attraper, journalisez l'erreur avant de continuer.
- raise NouvelleErreur(...) from e conserve l'erreur d'origine dans la trace : on ajoute un contexte métier sans perdre la cause.
- Quand le test est simple, validez plutôt que de capturer : if cle in d est plus clair qu'un try sur d[cle], sauf si l'absence est rare.
Voir aussi
- Conversions de typeint, float, str et bool convertissent une valeur d'un type à un autre. Toute donnée lue dans un fichier, un formulaire ou une API arrive en texte : il faut la convertir avant de calculer.
- print & débogageprint affiche des valeurs dans la console, et ses paramètres sep et end règlent la mise en forme. C'est l'outil de débogage le plus direct pour vérifier une valeur intermédiaire pas à pas.
- Fichiers, pathlib & csvopen avec with lit et écrit des fichiers en les refermant proprement, pathlib.Path manipule les chemins et csv découpe les lignes. Indiquez toujours encoding="utf-8" pour garder les accents.