Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Obsługa wyjątków
Podsumowanie obsługi wyjątku

Cel

Udaj się do biura i upewnij się, że podaż pieniędzy jest właściwie wyważona, używając bloku kodu finally oraz słowa kluczowego assert.

Głęboko na drugim piętrze znajduje się biuro przeznaczone do przechowywania funduszy na przyszłe inwestycje dla farmy. Nadszedł czas, aby sprawdzić księgi i upewnić się, że wszystkie zapisy się zgadzają. Pracując z liczbami, błędy matematyczne i inne problemy są nieuniknione, dlatego ponownie warto zastosować obsługę wyjątków, aby wychwycić i rozwiązać problemy.

Poza blokami kodu try / except oraz else istnieje także blok kodu finally, który pozwala zakończyć obsługę wyjątku. Dodatkowo słowo kluczowe assert jest funkcją debugowania, która umożliwia sprawdzenie, czy kod zawiera błędy, pozwalając naprawić wadliwy kod.

Zacznij od przejścia do jasnego znaku X przed drzwiami biura i użycia funkcji open() do otwarcia drzwi, aby wejść. Po wejściu udaj się do złotego znaku X i użyj funkcji collect(), aby zebrać dwie różne stałe o nazwach: categories oraz savings. Stała categories to lista, która przechowuje podaż pieniędzy trzech kategorii, nazwanych: "exports", "imports", "stock", które muszą zostać zweryfikowane. Stała savings to zmienna, która przechowuje podaż pieniędzy, które mogą być potrzebne do zapewnienia odpowiedniej ilości środków w skarbcu.

Gdy wszystkie niezbędne przedmioty zostaną zebrane, nadszedł czas, aby wyważyć podaż pieniędzy przechowywanych w workach, które zostaną zebrane i rozdysponowane przez urzędnika po zakończeniu Twoich działań. Udaj się do ciemnego znaku X nad niebieskim dywanem, a następnie do znaków X nad dywanami niebieskim, żółtym i czerwonym. Tutaj użyjemy stałej listy categories, aby zweryfikować, czy każdy worek zawiera wszystkie niezbędne składniki przed wysyłką.

Każdy worek powinien zawierać składniki wymienione w liście categories. Istnieją trzy stałe słownikowe odpowiadające poszczególnym workom: blue_sack, yellow_sack oraz red_sack. Uruchom pętlę for, stojąc na znaku X nad dywanem niebieskim, aby zweryfikować, że worek zawiera wszystkie wymagane materiały, a następnie potwierdź, że podaż została odpowiednio ujęta.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Niektóre worki powinny zawierać wszystkie wymagane materiały, ale jak to bywa w tych ćwiczeniach, możesz napotkać błąd. Jeśli napotkasz problem, musisz użyć bloków kodu try / except do przechwycenia błędu, w tym przypadku KeyError:, który występuje, gdy klucz w słowniku nie zostanie znaleziony. W takim przypadku dodajemy również finally do obsługi wyjątku, który wykonuje kod końcowy zawsze na końcu procedury obsługi błędu. W odróżnieniu od wyjątków, może być tylko jeden blok finally na jeden blok try. Na przykład w przypadku 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")

Powtórz ten proces na ciemnych znakach X nad dywanami żółtym i czerwonym, używając odpowiednio stałych słownikowych yellow_sack oraz red_sack. W niektórych przypadkach może nie być to konieczne, ponieważ błąd wystąpi jedynie, gdy w workach brakuje jakiegoś elementu.

Gdy worki zostaną zweryfikowane, nadszedł czas, aby przejść do skrzyń przed dywanami: zielonym, purpurowym i pomarańczowym. Tutaj musimy upewnić się, że podaż pieniędzy w każdej skrzyni wynosi dokładnie 30, a następnie skrzynia zostanie zamknięta. Istnieją trzy zmienne stałe odpowiadające poszczególnym skrzyniom, o nazwach: green_chest, purple_chest oraz orange_chest.

Największym problemem przy weryfikacji skrzyń jest to, że nie znamy ich dokładnej zawartości. Gdy masz do czynienia z nieznanymi wartościami, możesz użyć słowa kluczowego assert. Słowo to pozwala zweryfikować, czy deklarowane przez Ciebie stwierdzenie jest prawdziwe, czy fałszywe, co jest bardzo przydatne przy wykrywaniu błędów w kodzie. Słowo kluczowe assert jest używane w połączeniu z: try, except, else oraz final i ich różnymi kombinacjami, aby naprawić błędy w kodzie. Na przykład, w przypadku 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()

W powyższym kodzie weryfikujemy, czy green_chest zawiera właściwą ilość środków pieniężnych, używając słowa kluczowego assert. Jeśli nie zawiera właściwej ilości, wywoływany jest blok except, w którym obliczamy, a następnie odejmujemy brakującą ilość od zmiennej savings i dodajemy ją do skrzyni. Jeśli podaż jest kompletna, wywoływany jest blok else, co potwierdza, że wszystkie zasoby zostały uwzględnione. Po weryfikacji wszystkiego, wykonywany jest blok finally, a funkcja close() zostaje wywołana, aby zamknąć skrzynię.

Na znakach X nad dywanami zielonym, purpurowym i pomarańczowym, staw czoła skrzyniom i przeprowadź weryfikację, używając green_chest, purple_chest oraz orange_chest w odpowiednich kolorowych dywanach. Po zakończeniu, udaj się do jasnego znaku X i użyj funkcji place(), aby przechować resztę wartości zmiennej savings w skrzyni, co pozwoli ukończyć poziom.

Księga Kodów