Cours avancé de développement Python
Chapitre
>
Niveau
Gestion des exceptions
Exceptions personnalisées
Objectif
Utilisez des exceptions personnalisées pour collecter des messages avec des commandes de produits et les envoyer via un pigeon voyageur.
Certaines instructions sont déployées à travers la ferme et d'autres stations via un pigeon messager, il serait judicieux d'en envoyer quelques-unes pour prendre de l'avance sur le planning. Nous avons intercepté des erreurs en utilisant des exceptions communes, mais il peut parfois être avantageux de créer vos propres exceptions personnalisées pour des scénarios très spécifiques. Nous allons extraire des messages et sélectionner des pigeons en identifiant les éléments corrects à l'aide de nos propres exceptions personnalisées.
Les exceptions personnalisées sont créées en définissant des classes, en ajoutant la clause (Exception) vous pouvez réutiliser une classe pour exécuter des exceptions. Pour notre cas, nous allons créer deux exceptions : InvalidLocation qui est levée lorsqu'une chaîne spécifique ne passe pas la vérification, et UnsuitableSelection qui est utilisée pour vérifier si un nombre dépasse un certain seuil.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Maintenant que les classes sont mises en place, il est temps d'aller chercher les notes de service afin qu'elles puissent être envoyées. Créez une liste nommée prep afin de stocker et combiner les éléments nécessaires à l'échange à venir. Rendez-vous à la marque X sombre sur le tapis rouge, sur la rangée de tables avec des marques X devant, nous chercherons des notes de service qui ont des commandes destinées au secteur ouest de la ferme.
Il y a quatre constantes variables utilisées dans ce segment : red_memo, blue_memo, green_memo et orange_memo. Seules les notes marquées pour être livrées dans le secteur "west" doivent être collectées afin qu'elles puissent être envoyées. Pour déterminer si nous prenons la note ou pas, nous utiliserons les blocs de code try/except et else en conjonction avec l'exception personnalisée InvalidLocation. Pour utiliser l'exception personnalisée, faites en sorte que le bloc try vérifie si la note est étiquetée "west" et, sinon, lève l'exception. Le bloc except confirme que la note est invalide et le bloc else collecte et ajoute à la liste prep la note si elle s'avère destinée au secteur "west". Par exemple :
try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)
Rendez-vous à chacune des marques X sombres sur les tapis colorés devant les tables et exécutez la séquence d'exception en utilisant les constantes variables correspondantes à chaque couleur.
Une fois que vous avez collecté les notes, rendez-vous à la marque X dorée devant la porte et utilisez la fonction open() pour accéder aux colombiers de pigeons. Une fois à l'intérieur, rendez-vous à la marque X claire, faites demi-tour, utilisez la fonction close() pour fermer la porte afin de vous assurer qu'aucun pigeon ne s'échappe.
Rendez-vous à la marque X sombre sur le tapis violet, sur les enclos nous vérifierons si le pigeon est assez âgé pour voler avec un message ou s'il s'agit d'un poussin incapable d'effectuer une livraison. Il y a quatre autres constantes variables à utiliser dans ce segment : purple_pen, yellow_pen, white_pen et pink_pen correspondant à chaque tapis coloré. Nous utiliserons la même technique que pour les notes, en utilisant la seconde classe qui a été mise en place.
Utilisez les blocs de code try/except et else avec l'exception personnalisée UnsuitableSelection pour vérifier si le pigeon est assez âgé pour effectuer la livraison. Le bloc try vérifie si la constante variable représentant l'enclos contient un pigeon approprié en vérifiant si l'oiseau a moins de deux (2) ans. Si le pigeon est inapproprié, le bloc except est déclenché, sinon le bloc else est activé vous permettant d'ajouter un pigeon à la liste prep afin de livrer le message.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Rendez-vous à chaque marque X sombre sur les tapis colorés et utilisez cette séquence avec la constante variable correcte correspondant au tapis de la bonne couleur. Une fois que vous avez collecté les pigeons et les messages, rendez-vous à la marque X dorée tout en bas et utilisez la fonction place() avec la liste prep que vous avez créée afin d'envoyer les pigeons pour livrer les messages et compléter le niveau.