Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| dev:python:core:exceptions [2020/12/20 09:46] – créée yoann | dev:python:core:exceptions [2024/10/17 16:29] (Version actuelle) – Ajout lien de référence yoann | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ====== Python: les exceptions ====== | ====== Python: les exceptions ====== | ||
| + | * Une exception n'est pas une fatalité, c'est un mécanisme de communication d' | ||
| + | * Les exceptions fournissent de l' | ||
| + | * Le mécanisme d' | ||
| + | |||
| + | Lorsque l' | ||
| + | |||
| + | On capture les exception via le bloc **try...except**. Toutes les instructions présentes dans le bloc try sont évaluées et les exceptions produites vont être comparées à celles gérées dans le bloc except. Dans le bloc du except, on précise l' | ||
| + | |||
| + | On capture l' | ||
| + | |||
| + | On peut ajouter autant de close **except** que nécessaire pour réagir aux exceptions pouvant être levées par un seul bloc try. | ||
| + | |||
| + | <note warning> | ||
| + | En Python on peut définir une close **excpet** sans préciser aucun type d' exception. C'est dans la majorité des cas une très mauvaise pratique car la close va masquer (en capturant) toutes les exceptions produites par le code sans y réagir spécifiquement. | ||
| + | </ | ||
| + | |||
| + | De manière générale on capture toujours les exceptions que l'on a étudié et prévu dans notre code et on laisse remonter les exceptions non prévues. | ||
| + | |||
| + | Une caractéristique importante des exceptions est qu' | ||
| + | |||
| + | Ce mécanisme de bubbling à deux avantages majeurs: | ||
| + | * on peut capturer et gérer l’exception n' | ||
| + | * La trace permet de savoir exactement le cheminement de l’exception et fournit des informations précieuses pour le diagnostic du problème dans le programme. | ||
| + | |||
| + | |||
| + | < | ||
| + | Une bonne pratique est de capturer les exceptions bien identifiées au plus près de l' | ||
| + | </ | ||
| + | |||
| + | Pour connaître la liste des exceptions pouvant être produites, il faut lire la documentation des modules et objets que l'on utilise. | ||
| + | |||
| + | <code python> | ||
| + | try | ||
| + | # Bloc d' | ||
| + | # une ou plusieurs exceptions | ||
| + | ... | ||
| + | ... | ||
| + | except TypeExceptionA: | ||
| + | # Instructions spécifiques de réaction | ||
| + | # à l' exception A | ||
| + | ... | ||
| + | ... | ||
| + | except TypeExceptionB: | ||
| + | # Instructions spécifiques de réaction | ||
| + | # à l' exception B | ||
| + | ... | ||
| + | ... | ||
| + | else: | ||
| + | # Bloc d’instructions exécuté si aucune | ||
| + | # exception n'est produite | ||
| + | ... | ||
| + | ... | ||
| + | finally: | ||
| + | # Bloc d' | ||
| + | ... | ||
| + | ... | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | Le bloc **finally** est intéressant: | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | def return_with_finally(number): | ||
| + | try: | ||
| + | # le return est dans le bloc try | ||
| + | # meme si aucune exception n'est produite pas l' | ||
| + | # le bloc finally sera exécuté après le return | ||
| + | return 1/number | ||
| + | | ||
| + | except ZeroDivisionError as e: | ||
| + | print(f" | ||
| + | return(" | ||
| + | | ||
| + | finally: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | L' | ||
| + | |||
| + | Le langage Python intègre une [[https:// | ||
| + | |||
| + | |||
| + | ===== Références ===== | ||
| + | |||
| + | * https:// | ||