Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe
Fehlerbehandlung
Benutzerdefinierte Ausnahmen
Ziel
Verwende benutzerdefinierte Ausnahmen, um Nachrichten mit Produktbestellungen zu sammeln und diese per Brieftaube zu versenden.
Einige Nachrichten werden über die Farm und an anderen Stationen mittels Brieftaube verteilt, es wäre eine gute Idee, einige zu versenden, um im Zeitplan voraus zu bleiben. Bisher haben wir Fehler mit gängigen Ausnahmen abgefangen, aber manchmal kann es von Vorteil sein, eigene benutzerdefinierte Ausnahmen für sehr spezifische Szenarien zu erstellen. Wir werden Nachrichten beschaffen und Tauben auswählen, indem wir die richtigen Elemente mithilfe unserer eigenen benutzerdefinierten Ausnahmen identifizieren.
Benutzerdefinierte Ausnahmen werden erstellt, indem man Klassen definiert. Indem du die (Exception)-Klausel hinzufügst, kannst du eine Klasse umfunktionieren, um Ausnahmen auszuführen. Für unsere Zwecke werden wir zwei erstellen: InvalidLocation, die aktiviert wird, wenn ein bestimmter String die Überprüfung nicht besteht, und UnsuitableSelection, die verwendet wird, um zu prüfen, ob eine Zahl einen bestimmten Schwellenwert überschreitet.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Nachdem die Klassen eingerichtet sind, ist es Zeit, die Memos zu beschaffen, damit sie versendet werden können. Erstelle eine Liste namens prep, um die Komponenten zu speichern und zusammenzuführen, die für den bevorstehenden Austausch benötigt werden. Gehe zum dunklen X-Zeichen über dem roten Teppich; an der Tafelreihen mit X-Markierungen vorne werden wir nach Memos suchen, die Bestellungen für den westlichen Sektor der Farm enthalten.
In diesem Abschnitt werden vier Variable Konstanten verwendet: red_memo, blue_memo, green_memo und orange_memo. Es sollen nur Memos gesammelt werden, die zur Lieferung im Sektor "west" bestimmt sind, damit sie versendet werden können. Um zu bestimmen, ob wir das Memo annehmen oder nicht, verwenden wir try/except und else Code-Blöcke in Verbindung mit der benutzerdefinierten Ausnahme InvalidLocation. Um die benutzerdefinierte Ausnahme zu verwenden, soll der try-Block überprüfen, ob das Memo mit "west" gekennzeichnet ist, und falls nicht, die Ausnahme auslösen. Der except-Block bestätigt, dass das Memo ungültig ist, und der else-Block sammelt und fügt das Memo der Liste prep hinzu, wenn sich zeigt, dass es für den Sektor "west" bestimmt ist. Zum Beispiel:
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)
Gehe zu jedem der dunklen X-Zeichen über den farbigen Teppichen vor den Tischen und führe die Ausnahme-Sequenz mit den entsprechenden Variablenkonstanten für jede Farbe aus.
Sobald du die Memos gesammelt hast, gehe zum goldenen X-Zeichen vor der Tür und verwende die Funktion open(), um Zugang zu den Taubenschlägen zu erhalten. Sobald du drinnen bist, gehe zum hellen X-Zeichen, wende dich um und verwende die Funktion close(), um die Tür zu schließen, damit keine Tauben entkommen.
Gehe zum dunklen X-Zeichen über dem lila Teppich; auf den Käfigen werden wir überprüfen, ob die Taube alt genug ist, um eine Nachricht zu überbringen, oder ob es sich um einen Küken handelt, das nicht in der Lage ist, eine Lieferung durchzuführen. In diesem Abschnitt werden vier weitere Variable Konstanten verwendet: purple_pen, yellow_pen, white_pen und pink_pen, die jeweils dem farbigen Teppich entsprechen. Wir werden die gleiche Technik wie bei den Memos anwenden, indem wir die zweite eingerichtete Klasse verwenden.
Verwende die try/except und else Code-Blöcke mit der benutzerdefinierten Ausnahme UnsuitableSelection, um festzustellen, ob die Taube alt genug ist, um die Lieferung durchzuführen. Der try-Block überprüft, ob die Variable Konstante, die den Käfig repräsentiert, eine geeignete Taube enthält, indem überprüft wird, ob der Vogel jünger als zwei (2) Jahre ist. Wenn die Taube ungeeignet ist, wird der except-Block ausgelöst, andernfalls wird der else-Block aktiviert, so dass du die Taube der prep-Liste hinzufügen kannst, um die Nachricht zu überbringen.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Gehe zu jedem dunklen X-Zeichen über den farbigen Teppichen und verwende diese Sequenz mit der korrekten Variablenkonstante, die dem entsprechenden farbigen Teppich zugeordnet ist. Sobald du die Tauben und Nachrichten gesammelt hast, gehe zum goldenen X-Zeichen ganz unten und benutze die Funktion place() mit der erstellten prep-Liste, um die Tauben zu entsenden, damit sie die Nachrichten überbringen und das Level abschließen.