%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/12_fonctions\|← Fonctions]] | [[Code et Développement/Programmation/Lecture de Code - Python/14_modules\|Modules →]] | > |:---|---:| %% nav-fin %% # Exceptions et gestion des erreurs Une exception est une erreur qui survient à l'exécution. Sans traitement, elle arrête le programme. --- ## try / except ```python try: n = int(input()) # peut lever ValueError si non numérique print(10 / n) # peut lever ZeroDivisionError except ValueError: print("Ce n'est pas un entier.") except ZeroDivisionError: print("Division par zéro impossible.") ``` Le bloc `try` est exécuté. Si une exception survient, le bloc `except` correspondant prend la main. --- ## Capturer l'exception ```python try: x = int("abc") except ValueError as e: print(f"Erreur : {e}") # affiche Erreur : invalid literal for int() with base 10: 'abc' ``` --- ## else et finally ```python try: n = int(input()) except ValueError: print("Erreur de saisie.") else: print(f"Vous avez saisi : {n}") # exécuté s'il n'y a pas d'exception finally: print("Fin.") # toujours exécuté ``` --- ## Exceptions courantes | Exception | Cause typique | |---|---| | `ValueError` | `int("abc")`, mauvaise conversion | | `ZeroDivisionError` | division par 0 | | `IndexError` | `lst[10]` sur liste trop courte | | `KeyError` | `d["clé"]` absente dans un dict | | `TypeError` | opération sur mauvais type | | `NameError` | variable non définie | | `FileNotFoundError` | fichier inexistant | --- ## Lever une exception ```python def racine(x): if x < 0: raise ValueError(f"x doit être positif, reçu {x}") return x ** 0.5 ``` --- ## Pattern — validation de saisie ```python while True: try: n = int(input("Entrez un entier : ")) break except ValueError: print("Valeur invalide, réessayez.") ``` ## À vous **À manipuler :** prédisez la sortie. ```sq-affiche try: print("A") x = 1 / 0 print("B") except ZeroDivisionError: print("C") print("D") --- réponse: A\nC\nD explication: l'erreur à la ligne 3 interrompt le bloc try : B n'est jamais affiché. Le programme continue après le except. ``` ```sq-affiche for v in ["4", "x", "0"]: try: print(8 // int(v)) except ValueError: print("pas un entier") except ZeroDivisionError: print("division par zéro") finally: print("-") --- réponse: 2\n-\npas un entier\n-\ndivision par zéro\n- explication: chaque tour exécute le bloc finally, qu'une exception ait eu lieu ou non. ``` %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/12_fonctions\|← Fonctions]] | [[Code et Développement/Programmation/Lecture de Code - Python/14_modules\|Modules →]] | > |:---|---:| %% nav-fin %%