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 Prochaine révisionLes deux révisions suivantes | ||
python:bases:exceptions [2021/06/30 20:59] – [Résumé] phil | python:bases:exceptions [2022/10/28 10:43] – [Pour aller plus loin ...] phil | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{ : | ||
+ | |||
+ | ===== Python - Test, exceptions, assertions et module doctest ===== | ||
+ | [Mise à jour le : 30/6/2021] | ||
+ | |||
+ | * **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 ... ==== | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||