- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
giache
6 mars 2023 - 06 mars 2023 à 21:45
checkConversation résolue
2 réponses
Bonjour , j'ai deux question sur ce sujets des exceptions Comment situer les type d'exception à indiquer :ZeroDivisionError, TypeError, NameError , car ces formats ne sont pas montrés en tt …
00:00:00 :Dans la partie précédente, on a vu la théorie du bloc try-except, et dans cette partie je vaisvous montrer un cas de figure dans lequel on pourrait l'utiliser. On a deux variables ici,
00:00:09 :une variable a et une variable b, qui pour l'instant sont définies avec deux nombres. Onpourrait donc faire une division de ces deux nombres en disant a divisé par b. Donc là,
00:00:18 :si j'exécute le script, je n'aurai aucune erreur puisqu'on a bien un nombre à l'intérieur de a etun nombre à l'intérieur de b. Par contre, si je commence à modifier ces valeurs et qu'à la place
00:00:27 :de 10 ici je mets un 0, on va se retrouver avec une erreur puisqu'on ne peut pas diviser un nombrepar 0. On a donc une erreur de type 0 division error. Pour gérer cette erreur, on va donc
00:00:39 :utiliser un bloc try-except. Je vais mettre try, deux points, je vais à la ligne, je commence unbloc, je mets mon print à l'intérieur, donc j'essaie de récupérer directement le résultat de cetteopération à l'intérieur de ce bloc try, et si ça ne fonctionne pas, eh bien on va passer dans le
00:00:55 :bloc except. Donc je vais mettre print ici et je vais mettre division par 0 impossible. Toutsimplement, donc si on exécute le script de nouveau, on se retrouve bien avec le messagedivision par 0 impossible. Donc le script n'a pas planté, on n'a pas eu cette fois-ci l'erreur 0
00:01:12 :division error et on a juste affiché le print à la place. Sauf que là en fait c'est un peu tropvaste comme try-except. En fait avec le except ici, quand on ne spécifie rien, on va récupérer tous
00:01:24 :les types d'erreurs qui peuvent arriver avec cette division. Donc là dans ce cas-ci on a une erreurde type 0 division error puisqu'on essaie de diviser par 0, mais si à la place du 0 ici jemets une chaîne de caractère, comme bonjour par exemple, et que je refais mon script, eh bien on
00:01:40 :a toujours cette erreur division par 0 impossible. Sauf que là ce n'est plus une division par 0,c'est une division par une chaîne de caractère. Donc là ce qu'il va falloir faire en fait c'est
00:01:48 :spécifier ici le type d'erreur qu'on veut gérer. Donc après le except, on va spécifier qu'on veutgérer les 0 division error seulement, et que si c'est une erreur de type 0 division error qu'ona, eh bien on va afficher cette phrase. Donc si je remets un 0, je vais avoir le même cas de figure
00:02:04 :que tout à l'heure. Si je relance le script, on a bien la phrase division par 0 qui est impossiblequi s'affiche. Sauf que cette fois-ci si je remets ma chaîne de caractère, eh bien on ne va pas
00:02:14 :rentrer à l'intérieur de ce bloc except 0 division error puisque ce n'est plus une erreur de typedivision par 0. Donc si je relance le script, cette fois-ci on a un autre type d'erreur qui
00:02:25 :cette fois-ci est une erreur de type type error qui nous dit qu'on ne peut pas diviser un nombrepar une chaîne de caractère. Donc cette erreur on va pouvoir la récupérer dans un autre bloc
00:02:34 :except. Donc à la suite de ça je vais faire un autre except et je vais mettre cette fois-ci excepttype error. Et à l'intérieur de ça je mets un print et je dis la variable b n'est pas du bon type.
00:02:49 :Tout simplement. Et donc là si on relance le script, on se retrouve bien cette fois-ci avecun message d'erreur qui correspond à l'erreur de type type error. Et on peut continuer comme ça.
00:02:59 :Un autre type d'erreur par exemple qui pourrait arriver c'est si b n'est pas défini. Donc si bn'est pas défini on va avoir une erreur cette fois-ci de type name error. Alors moi je le sais
00:03:08 :mais vous vous ne le savez pas puisque vous commencez avec Python. Donc comment on peutsavoir quel type d'erreur on va avoir ? Eh bien le plus simple ça reste d'essayer. Donc là j'ai fait
00:03:16 :un cas de figure dans lequel une variable n'est pas définie. Donc je sais que le script va planteret je sais aussi que je veux prévoir en fait ce type d'erreur. Donc je crée l'erreur moi-même,
00:03:26 :j'exécute le script avec cette erreur. Donc là j'ai pas sauvegardé le script donc je le sauvegardeet je le relance. Et là voilà on a créé une erreur et on a ici directement le type d'erreur
00:03:36 :qui est généré. Donc là c'est une erreur de type name error. Donc là encore je vais pouvoir laspécifier dans un autre bloc except et dire name error. Je fais un print pour dire la variable
00:03:48 :b n'est pas définie. Donc je relance mon script et on a bien ici l'erreur la variable b n'est pasdéfinie. Si jamais vous voulez récupérer l'erreur en tant que telle c'est possible on peut le
00:04:00 :spécifier avec un as ici. Donc on peut dire par exemple as e et e ici ça va être une variablequi va contenir l'erreur. Donc je peux dire par exemple plutôt que de mettre ça ici directement
00:04:11 :erreur 2 point 1 virgule et je mets après mon print ici le message d'erreur. Donc je mets unechaîne de caractère erreur et l'erreur en question. Je sauvegarde, je relance et là on a bien donc ma
00:04:24 :chaîne de caractère erreur et ensuite l'erreur qui est affichée. Donc name b is not defined.Donc ça c'est une autre façon de faire. Soit vous mettez directement votre message à vous si vous
00:04:33 :voulez quelque chose de plus clair ou de spécifique ou en français comme on l'a fait par exemple ici.Soit vous pouvez directement récupérer le message de l'erreur dans une variable commececi avec as et ici un nom de variable et l'afficher ensuite à l'intérieur du bloc accept.
00:04:46 :Les deux dernières choses qu'on peut faire c'est rajouter une condition else. Else il va êtreexécuté en fait uniquement dans le cas où on n'a pas d'erreur. Donc ce que je pourrais faire ici
00:04:56 :par exemple et bien c'est en fait mettre dans une variable résultat le résultat de ma division.Donc plutôt que de faire un print je récupère ça dans une variable résultat et dans le else icije vais faire un print de résultat. Donc ce bloc else ne sera exécuté que si le try réussit. Donc
00:05:13 :si on arrive à faire la division on va donc ne pas passer à l'intérieur de tous ces except eton va directement aller dans le else et afficher le résultat. Donc je sauvegarde, j'exécute et
00:05:23 :on a bien donc là une erreur puisque b n'est pas défini donc c'est normal. Donc là vous voyez qu'ona bien fait une bonne gestion d'erreur. J'ai oublié de déclarer une variable dans mon script et le
00:05:32 :script n'a pas planté et on a bien un message d'erreur qui s'affiche mais le script ne plantepas. Donc on gère les erreurs comme ça le script peut continuer et on affiche ce qu'il se passe en
00:05:41 :cas d'erreur. Donc là je vais spécifier une valeur pour 10, je sauvegarde et je relance et on a bien0 5 qui s'affiche puisque on a réussi à passer dans le bloc try et donc après on est passé dansle bloc else. La dernière chose qu'on peut faire c'est un bloc finally. Finally ça va exécuter le
00:05:58 :script qui est à l'intérieur de ce bloc peu importe ce qu'il arrive. Donc si je mets par exemple icifin du bloc et bien dans tous les cas de figure on va exécuter ce print. Donc si on n'a aucune
00:06:07 :erreur on va l'exécuter donc on a bien fin du bloc qui s'affiche. Si on a une erreur donc que je metspar exemple 0 ici de la même façon on va exécuter le finally en plus d'exécuter ce qu'on avait àl'intérieur du except. Donc là on a une exception 0 division erreur donc on print que la division
00:06:23 :par 0 est impossible et on passe dans le finally à la fin. Pareil si j'enlève b ici et que jerelance on a cette fois ci une erreur donc name b is not defined et on va dans la fin du bloc. Donc
00:06:35 :vous voyez que ici on peut spécifier vraiment tous les types d'erreurs qu'on va rencontrer.Ça va nous permettre du coup de faire une bonne gestion des erreurs et d'avoir un script qui varéagir de la bonne façon en fonction de ce qu'on va avoir. Donc ça ressemble un peu à une structure
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.