Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| python:bases:exceptions [2021/06/30 20:59] – [Résumé] phil | python:bases:exceptions [2025/06/19 19:29] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | [[: | ||
| + | |||
| + | ===== Python - Test, exceptions, assertions et module doctest ===== | ||
| + | [Mise à jour le : 16/12/2022] | ||
| + | |||
| + | * **Sources** | ||
| + | * **Documentation** sur Python.org : < | ||
| + | * Framework sur Github - < | ||
| + | |||
| + | * **Mots-clés** : exceptions, assertions | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | | and | ||
| + | | as | def | ||
| + | | **assert** | ||
| + | | __async__ | ||
| + | | __await__ | ||
| + | | break | ||
| + | | class | ||
| + | |||
| + | * < | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Introduction ==== | ||
| + | Quand Python rencontre une erreur dans le code, il **lève une exception**. Le traitement de ces exceptions permettra notamment de donner une réponse à une erreur produite par l' | ||
| + | |||
| + | ==== 1. Exceptions ==== | ||
| + | |||
| + | === 1.1 Forme minimale try ... except === | ||
| + | |||
| + | <code python *.py> | ||
| + | try: | ||
| + | # Bloc de code à essayer | ||
| + | pass | ||
| + | except: | ||
| + | # Bloc qui sera exécuté en cas d' | ||
| + | pass | ||
| + | </ | ||
| + | |||
| + | //Exemple// | ||
| + | |||
| + | <code python *.py> | ||
| + | age = input(" | ||
| + | try: | ||
| + | age = int(age) | ||
| + | print(" | ||
| + | except: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | //Résultat attendu// | ||
| + | |||
| + | Quel est votre âge ? 35 \\ | ||
| + | Vous avez 35 ans \\ | ||
| + | \\ | ||
| + | Quel est votre âge ? ldkfjg \\ | ||
| + | Erreur lors de la conversion de votre âge ! \\ | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | === 1.2 Forme complète try ... except ... finally=== | ||
| + | |||
| + | <code python *.py> | ||
| + | try: | ||
| + | # Bloc de code à essayer | ||
| + | pass | ||
| + | except < | ||
| + | # Ce bloc sera exécuté si l' | ||
| + | pass | ||
| + | except < | ||
| + | # Ce bloc sera exécuté si l' | ||
| + | pass | ||
| + | except < | ||
| + | # Ce bloc sera exécuté si l' | ||
| + | pass | ||
| + | else: | ||
| + | # Ce bloc sera exécuté si le code du bloc try s'est exécuté sans erreur | ||
| + | # else souvent omis et bloc placé dans try | ||
| + | pass | ||
| + | finally: | ||
| + | # Bloc exécuté qu'il y ait eu des erreurs ou non | ||
| + | </ | ||
| + | |||
| + | //Exemple// | ||
| + | |||
| + | <code python *.py> | ||
| + | num = input(" | ||
| + | denom = input(" | ||
| + | resultat = 0 | ||
| + | try: | ||
| + | numerateur = int(num) | ||
| + | denominateur = int(denom) | ||
| + | resultat = numerateur / denominateur | ||
| + | except NameError: | ||
| + | print(" | ||
| + | except ValueError: | ||
| + | print(" | ||
| + | except ZeroDivisionError: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | finally: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | //Résultat attendu// | ||
| + | |||
| + | Entrer le numérateur | ||
| + | Entrer le dénominateur 2 \\ | ||
| + | Le résultat de la division est 6.0 \\ | ||
| + | On poursuit l' | ||
| + | \\ | ||
| + | Entrer le numérateur | ||
| + | Entrer le dénominateur klkl \\ | ||
| + | Le numérateur ou le dénominateur possède un type incompatible avec la division. \\ | ||
| + | On poursuit l' | ||
| + | \\ | ||
| + | Entrer le numérateur | ||
| + | Entrer le dénominateur 0 \\ | ||
| + | Le dénominateur est égal à 0. \\ | ||
| + | On poursuit l' | ||
| + | |||
| + | === 1.3 Lever une exception === | ||
| + | <callout type=" | ||
| + | |||
| + | <code python *.py> | ||
| + | raise TypeException(" | ||
| + | </ | ||
| + | |||
| + | ==== 2. Les assertions ==== | ||
| + | <callout type=" | ||
| + | |||
| + | // Syntaxe // | ||
| + | <code python *.py> | ||
| + | assert test | ||
| + | </ | ||
| + | |||
| + | //Exemple// | ||
| + | |||
| + | <code python *.py> | ||
| + | val = input(" | ||
| + | try: | ||
| + | val=int(val) | ||
| + | assert val>0 | ||
| + | except ValueError: | ||
| + | print(" | ||
| + | except AssertionError: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | // Résultat attendu // | ||
| + | Saisissez une valeur supérieure à 0 : 6 \\ | ||
| + | \\ | ||
| + | Saisissez une valeur supérieure à 0 : 0 \\ | ||
| + | La valeur n'est pas supérieure à 0 ! | ||
| + | |||
| + | |||
| + | ==== 2. Le module doctest ==== | ||
| + | |||
| + | * **Source** : < | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Résumé ==== | ||
| + | * On peut intercepter les erreurs (ou exceptions) levées par le code avec **try... except... finally...** | ||
| + | * La syntaxe d'une assertion est **assert test**. | ||
| + | * Les assertions lèvent une exception **AssertionError** si le test échoue. | ||
| + | * On peut lever une exception grâce au mot-clé **raise** suivi du type de l' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | {{ : | ||
| + | ==== Pour aller plus loin ... ==== | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||