Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe
Ausnahmebehandlung
Abschluss einer Ausnahme
Ziel
Gehe ins Büro und stelle sicher, dass die Geldmenge richtig ausbalanciert ist, indem du den finally Codeblock und das assert-Schlüsselwort verwendest.
Tief im zweiten Stock befindet sich ein Büro, das der Aufbewahrung von Geldern für zukünftige Investitionen in die Farm gewidmet ist. Es ist an der Zeit, sich einzumischen und sicherzustellen, dass alle Bücher ausgeglichen sind. Da bei Zahlen Rechenfehler und andere Probleme unvermeidlich auftreten, ist es erneut ratsam, Ausnahmebehandlung zu verwenden, um Fehler aufzufangen und zu beheben.
Abgesehen von den try / except- und else-Codeblöcken gibt es auch den finally Codeblock, der es dir ermöglicht, eine Ausnahme abzuschließen. Darüber hinaus ist das assert-Schlüsselwort ein Debug-Feature, das es dir ermöglicht, deinen Code auf Fehler zu überprüfen, um fehlerhaften Code zu beheben.
Beginne damit, zum leuchtenden X-Markierung vor der Bürotür zu gehen und benutze die open() Funktion, um die Tür zu öffnen und einzutreten. Sobald du drinnen bist, begib dich zum goldenen X-Markierung und nutze die collect() Funktion, um zwei verschiedene Konstanten namens: categories und savings abzuholen. Die Konstante categories ist eine Liste, die die Geldmenge der drei Kategorien enthält, benannt: "exports", "imports", "stock", die überprüft werden müssen. Die Konstante savings ist eine Variable, die eine Geldmenge hält, die benötigt werden könnte, um sicherzustellen, dass die Kassen ausreichend versorgt sind.
Jetzt, da alle notwendigen Gegenstände eingesammelt wurden, ist es an der Zeit, die in Säcken gelagerte Geldmenge auszugleichen, die von einem Schreiber irgendwann nach deiner Fertigstellung abgeholt und verteilt wird. Gehe zum dunklen X-Markierung auf dem blauen Teppich, für die X-Markierungen auf den blauen, gelben und roten Teppichen. Hier verwenden wir die Listen-Konstante categories, um zu überprüfen, ob jeder Sack alle erforderlichen Bestandteile enthält, bevor er versendet wird.
Jeder Sack soll die Bestandteile enthalten, die in der Liste categories aufgeführt sind. Es gibt drei Dictionary-Konstanten, die jeweils einem Sack entsprechen: blue_sack, yellow_sack und red_sack. Führe eine for-Schleife aus, während du auf der X-Markierung auf dem blauen Teppich stehst, um zu überprüfen, ob der Sack alle erforderlichen Materialien enthält, und bestätige anschließend, dass die Versorgung gesichert ist.
for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")
Einige der Säcke sollten alle erforderlichen Materialien enthalten, aber wie üblich in diesen Übungen kann es zu einem Fehler kommen. Wenn du auf ein Problem stößt, musst du die try/except-Codeblöcke verwenden, um den Fehler abzufangen, in diesem Fall einen KeyError:, der auftritt, wenn ein Dictionary-Schlüssel nicht gefunden wird. Wenn dies geschieht, fügen wir auch finally zur Ausnahmebehandlung hinzu, das die Ausnahme abschließt, indem es einen Code hinzufügt, der am Ende jeder Fehlerbehandlung immer ausgeführt wird. Im Gegensatz zu Ausnahmen kann es pro try-Block nur einen finally-Block geben. Zum Beispiel im Fall des 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")
Wiederhole diesen Vorgang an den dunklen X-Markierungen auf den gelben und roten Teppichen, indem du die Dictionary-Konstanten yellow_sack und red_sack verwendest. In manchen Fällen ist dies vielleicht nicht nötig, da der Fehler nur auftritt, wenn ein Element in den Säcken fehlt.
Nachdem die Säcke überprüft wurden, ist es an der Zeit, zu den Kisten vor den grünen, lilanen und orangen Teppichen überzugehen. Hier müssen wir sicherstellen, dass die Geldmenge in jeder Kiste genau 30 beträgt und diese anschließend geschlossen werden. Es gibt drei variable Konstanten, die jeweils einer Kiste entsprechen, nämlich: green_chest, purple_chest und orange_chest.
Das größte Problem bei der Überprüfung der Kisten besteht darin, dass wir ihren genauen Inhalt nicht kennen. Wenn du mit unbekannten Werten arbeitest, kannst du das assert-Schlüsselwort verwenden. Dieses Schlüsselwort ermöglicht es dir zu überprüfen, ob eine von dir deklarierte Aussage wahr oder falsch ist, was sehr nützlich ist, um deinen Code auf Fehler zu scannen. Das assert-Schlüsselwort wird in Verbindung mit: try, except, else und final sowie deren verschiedenen Kombinationen verwendet, um fehlerhaften Code zu reparieren. Zum Beispiel im Fall der 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()
Im obigen Code überprüfen wir, ob die green_chest die richtige Geldmenge enthält, indem wir das assert-Schlüsselwort verwenden. Wenn sie nicht die richtige Menge enthält, wird der except-Block ausgelöst, und wir berechnen dann den fehlenden Betrag, subtrahieren ihn von der savings-Variable und fügen ihn der Kiste hinzu. Wenn die Versorgung vollständig ist, wird der else-Block ausgelöst und es wird bestätigt, dass alle Vermögenswerte berücksichtigt wurden. Sobald alles überprüft wurde, wird der finally-Block ausgeführt und die close()-Funktion aufgerufen, um die Kiste zu schließen.
Bei den X-Markierungen auf den grünen, lilanen und orangen Teppichen, richte dich zu den Kisten und führe die Überprüfung durch, indem du green_chest, purple_chest bzw. orange_chest auf den entsprechenden farbigen Teppichen verwendest. Sobald du fertig bist, gehe zum leuchtenden X-Markierung und benutze die place()-Funktion, um den Rest der savings-Variablen in der Kiste zu verstauen, um so das Level abzuschließen.