C++ : ​La gestion des erreurs avec les exceptions

Capter et traiter une exception

Testez gratuitement nos 1300 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Gérer les erreurs signifie surtout de proposer une réponse adaptée aux problèmes remontés. Apprenez à traiter efficacement ces problèmes au bon moment dans votre code.
06:40

Transcription

Nous avons maintenant une classe qui lève des exceptions pour signaler ces erreurs. Ici pour des erreurs de logique d'un argument, donc une exception, invalid_argument et puis pour des erreurs d’exécution, ExceptionValidation que l'on a crée nous-mêmes. Ces exceptions il faut les capter, on a prévu de le faire ici, dans Formulaire, on avait laissé le commentaire. L'instruction pour capter les exceptions c'est try catch c'est ce qu'on appelle un bloc, try catch. La partie sensible qui peut lever une exception doit être au niveau du bloc, try et le traitement est au niveau du catch. Ici ExceptionValidation. Si jamais on a traité plusieurs exceptions, on peut rajouter plusieurs catch, un par type d'exception, le compilateur orientera vers l'exception qui correspond mieux à celle qui a été levée. Donc ici par exemple, on pourrait mettre invalid_argument si on voulait traiter un invalid_argument ou un out_of_range etc. Ici on n'a qu'une seule exception à gérer donc on fait qu'un seul catch. Le traitement de l'exception, on a dit ici, c'est capter et donc ajouter dans res avec un push_back puisqu'on a une collection type vector. Un message ici c'est une ExceptionValidation donc on a un champ origine et un accesseur origine. Si on regarde notre exception, l'origine c'est le Champ qui a un mauvais formatage, donc on prend son nom pour un message d'erreur parlant pour l'utilisateur c'est la vocation des exceptions aussi. Et e.what qui est la méthode qui permet d'accéder aux messages rattachés à l'exception. Ici on alimente correctement, par contre le problème intervient au niveau de ces instructions, donc j'aurai un don't ici. On essaye de faire notre boucle, de valider les champs, si un champ pose un problème de validation, il lève l'exception, nous arrivons là. Ici pour traiter l'exception, nous ajoutons l'exception et nous passons à la ligne suivante. Nous avons la syntaxe pour capter les exceptions mais c'est presque le plus facile. Le plus difficile est de bien déterminer ce que l'on met dans le try et ce que l'on ne met pas dans le try. Ici on a choisi de mettre la boucle for et les validations dans le try. Or si on a, par exemple, le premier champ qui passe et la validation est bonne, le deuxième champ sa validation est mauvaise, on va tout de suite passer dans le catch. Et le troisième champ ne sera pas du tout inspecté et donc la boucle for, elle sera interrompue par l'exception. Et donc on ne passera pas en revue tous les champs. Le premier champ non valide sera signalé à l'utilisateur et pas les autres. Il faut se poser la question si c'est ce que l'on veut, ou si on ne veut pas plutôt, et c'est ce qu'on avait déterminé, avoir la liste des champs. Et les problèmes pour l'utilisateur c'est plus pratique de tout corriger en une fois que d'avoir au compte goutte les erreurs de saisie. C'est pour ça qu'il faut être vigilent lorsqu'on fait un bloc try catch, de ne pas le faire au hasard et surtout pas prendre l'option de certains IDE, de générer le try catch à votre place. Certains IDE le proposent. Et ici notamment, si on réfléchit bien l'opération que l'on veut interrompre en cas d'exceptions, ça n'est que le valider. Et en aucun cas, on ne veut interrompre la boucle for. Et donc pour ça, on doit laisser hors du try, la boucle for. Tout ce qui doit être interrompu, en cas d'exception, doit être dans le try. Tout ce qui ne doit pas être interrompu en cas d'exception, doit être hors du try. Donc ici, on a une meilleure gestion puisque si un champ pose problème et lève une exception de validation, on enregistre cette exception mais on continue à parcourir les champs un par un. Voilà qui est bien pour notre formulaire. Donc on sait capter une exception et pour profiter de cette nouvelle connaissance, on va le faire aussi pour une exception standard, Au lieu de traiter une erreur d'ouverture de fichier avec un code de retour, comme on sait capter des exceptions, on va déclencher une exception. On va demander à la librairie standard de déclencher des exceptions plutôt que de nous signaler les erreurs par erreur de retour. On a ce choix-là avec les librairies standards. Et donc, grâce à la fonction exception, on peut activer le bit de déclenchements des exceptions. Alors ce bit est, std : :ios : : failbit. Et ce bit active si le open échoue, on aura une exception levée et on ne peut plus tester le fail. Il faut faire un try catch. Donc ici je commence à faire mon try catch. Toujours la question la plus importante c'est : « Qu'est-ce que je mets dans mon try et mon catch ? » Alors surtout dans le try, qu'est-ce que je veux ne pas faire s'il y a une exception ? Et si on regarde bien, il y a une chose que je ne veux pas faire en plus du open s'il y a une exception, c'est le close. Il n'y a aucune raison de fermer un fichier qui a échoué à son ouverture. Ça n'aurait aucun sens même si ça ne provoque pas forcément d'erreurs, Il faut que le programme soit logique et ici l'idée est, de ne pas fermer un fichier qui n'est pas ouvert. Donc ici le close est important. Donc toujours bien réfléchir à ce qu'il y a dans le try. Ios_base, c'est le nom de mon exception, : :failure. Ça c'est une exception standard alors je peux lui donner un nom mais ici, je n'en ai pas besoin puisque je traduis l'exception standard en une exception de validation qui me permettra d'afficher un message plus parlant à l'utilisateur. Donc je réinterprète l'exception. Je peux sauver et lancer l’exécution, petite erreur de compilation, pour l'include sur ExceptionValidation. Là, on me demande l'Entreprise, voilà : foo par exemple, ici je mets une date non valide. Un nom de fichier non valide et donc j'ai bien mes messages d'erreurs, mon exception qui a été captée et l'affichage. Nous avons maintenant un programme très complet en termes de gestion des exceptions et nous savons capter les exceptions de façon à bien gérer les erreurs !

C++ : ​La gestion des erreurs avec les exceptions

Profitez des nombreux atouts des exceptions pour gérer les erreurs dans vos développements C++. Apprenez à les déclencher, les intercepter, les personnaliser, etc.

56 min (13 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :20 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !