Cours avancé de développement Python
Chapitre
>
Niveau
Gestion des exceptions
Clore une Exception
Objectif
Rendez-vous au bureau et assurez-vous que l'approvisionnement en argent est dûment équilibré en utilisant le bloc de code finally et le mot-clé assert.
Au deuxième étage, un bureau est dédié au stockage des fonds destinés à de futurs investissements pour la ferme. Il est grand temps de vérifier que tous les comptes sont équilibrés. Lorsqu'on manipule des chiffres, des erreurs mathématiques et d'autres problèmes sont inévitables, c'est pourquoi la gestion des exceptions est, une fois de plus, une bonne idée pour intercepter et résoudre les erreurs.
En plus des blocs de code try / except et else, il existe également le bloc de code finally qui vous permet de finaliser une exception. De plus, le mot-clé assert est une fonctionnalité de débogage qui vous permet de vérifier si un morceau de code présente des erreurs, vous permettant ainsi de corriger le code défectueux.
Commencez par vous diriger vers la marque en X claire devant la porte du bureau et utilisez la fonction open() pour ouvrir la porte et entrer. Une fois à l'intérieur, rendez-vous à la marque en X dorée et utilisez la fonction collect() pour récupérer deux constantes différentes nommées : categories et savings. La constante categories est une liste qui contient l'approvisionnement en argent des trois catégories, nommées : "exports", "imports", "stock", qui doivent être vérifiées. La constante savings est une variable qui contient l'approvisionnement en argent qui pourrait être nécessaire pour s'assurer que les caisses sont correctement alimentées.
Maintenant que tous les éléments nécessaires ont été récupérés, il est temps d'équilibrer l'approvisionnement en argent stocké dans des sacs qui seront collectés et distribués par un employé une fois que vous aurez terminé. Rendez-vous vers la marque en X sombre sur le tapis bleu, ainsi que sur les marques en X des tapis bleu, jaune et rouge. Ici, nous utiliserons la constante de liste categories pour vérifier que chaque sac contient tous les composants nécessaires avant d'être expédié.
Chaque sac est censé contenir les composants figurant dans la liste categories. Il existe trois constantes de dictionnaire correspondant à chaque sac : blue_sack, yellow_sack et red_sack. Exécutez une boucle for tout en vous tenant sur la marque en X sur le tapis bleu pour vérifier que le sac contient tous les matériaux requis, puis confirmez que l'approvisionnement est correctement comptabilisé.
for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")
Certains sacs devraient contenir tous les matériaux requis, mais comme d'habitude dans ces exercices, vous pourriez rencontrer une erreur. Si tel est le cas, vous devez utiliser les blocs de code try / except pour intercepter l'erreur, en l'occurrence un KeyError: qui se produit si une clé de dictionnaire n'est pas trouvée. Dans ce cas, nous ajoutons également finally à l'exception, ce qui termine le traitement de l'exception en ajoutant un code qui s'exécute toujours à la fin de chaque gestion d'exception. Contrairement aux exceptions, il ne peut y avoir qu'un seul bloc finally par try. Par exemple, dans le cas du blue_sack :
try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")
Répétez ce processus sur les marques en X sombres des tapis jaune et rouge, en utilisant les constantes de dictionnaire yellow_sack et red_sack. Cela peut ne pas être nécessaire dans certains cas, car l'erreur ne survient que lorsqu'un élément manque dans les sacs.
Maintenant que les sacs ont été vérifiés, il est temps de passer aux coffres situés devant les tapis vert, violet et orange. Ici, nous devons nous assurer que l'approvisionnement en argent est exactement de 30 dans chaque coffre, puis les fermer par la suite. Il existe trois constantes variables correspondant à chaque coffre, nommées : green_chest, purple_chest et orange_chest.
Le plus gros problème lors de la vérification des coffres est que nous ne connaissons pas leur contenu exact. Lorsque vous manipulez des valeurs inconnues, vous pouvez utiliser le mot-clé assert. Ce mot-clé vous permet de vérifier si une affirmation que vous déclarez est vraie ou fausse, ce qui est très utile pour détecter les erreurs dans votre code. Le mot-clé assert est utilisé en conjonction avec try, except, else et finally et leurs diverses combinaisons pour corriger un code présentant des erreurs. Par exemple, dans le cas du green_chest :
try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()
Dans le code ci-dessus, nous vérifions si le green_chest contient la bonne quantité d'approvisionnement en argent en utilisant le mot-clé assert. S'il ne contient pas la bonne quantité, le bloc except est déclenché et nous calculons puis soustrayons l'approvisionnement manquant de la variable savings pour l'ajouter au coffre. Si l'approvisionnement est complet, le bloc else est déclenché et il est confirmé que tous les actifs sont comptabilisés. Une fois tout vérifié, le bloc finally est exécuté et la fonction close() est appelée pour fermer le coffre.
Sur les marques en X des tapis vert, violet et orange, faites face aux coffres et lancez la vérification en utilisant respectivement : green_chest, purple_chest, orange_chest. Une fois terminé, rendez-vous vers la marque en X claire et utilisez la fonction place() pour stocker le reste de la variable savings dans la caisse afin de terminer le niveau.