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
Niestandardowe wyjątki

Cel

Użyj niestandardowych wyjątków, aby zbierać wiadomości z zamówieniami produktów i wysyłać je za pomocą gołębia pocztowego.

Niektóre wiadomości są rozsyłane po farmie i innych stacjach za pomocą gołębia pocztowego, dlatego dobrym pomysłem jest wysłanie kilku, aby wyprzedzić harmonogram. Dotychczas przechwytywaliśmy błędy przy użyciu standardowych wyjątków, ale czasami warto stworzyć własne niestandardowe wyjątki dla bardzo specyficznych scenariuszy. Zamierzamy zebrać wiadomości i wybrać gołębie, identyfikując odpowiednie elementy przy użyciu naszych własnych niestandardowych wyjątków.

Niestandardowe wyjątki tworzy się przez definiowanie klas; dodając klauzulę (Exception), można przekształcić klasę do obsługi wyjątków. Dla naszych celów stworzymy dwie: InvalidLocation, który jest aktywowany, gdy określony ciąg znaków nie przechodzi weryfikacji, oraz UnsuitableSelection, który służy do sprawdzania, czy liczba przekracza określony próg.

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

Gdy klasy są już skonfigurowane, czas zebrać notatki, aby mogły zostać wysłane. Utwórz listę o nazwie prep, aby przechowywać i łączyć elementy potrzebne do nadchodzącej wymiany. Udaj się do ciemnego znaku X na czerwonym dywanie, przy szeregu stołów z oznaczonymi znakami X, gdzie będziemy wyszukiwać notatki zawierające zamówienia na sektor zachodni farmy.

W tym segmencie używane są cztery stałe zmienne: red_memo, blue_memo, green_memo i orange_memo. Zbierane mają być wyłącznie notatki oznaczone do dostarczenia w sektorze "west", aby mogły zostać wysłane. Aby zdecydować, czy dana notatka zostanie zabrana, użyjemy bloków try/except oraz else w połączeniu z niestandardowym wyjątkiem InvalidLocation. Aby użyć tego wyjątku, niech blok try sprawdzi, czy notatka jest oznaczona etykietą "west", a jeśli nie, niech zgłosi wyjątek. Blok except potwierdza, że notatka jest nieprawidłowa, a blok else zbiera i dodaje notatkę do listy prep, jeśli okaże się, że przeznaczona jest dla sektora "west". Na przykład:

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)

Udaj się do każdego z ciemnych znaków X na kolorowych dywanach przed stołami i uruchom sekwencję wyjątków, używając odpowiednich stałych zmiennych odpowiadających każdemu kolorowi.

Gdy zbierzesz notatki, udaj się do złotego znaku X przed drzwiami i użyj funkcji open(), aby uzyskać dostęp do gołębników. Gdy już wewnątrz, idź do jasnego znaku X, odwróć się, użyj funkcji close(), aby zamknąć drzwi i upewnić się, że żaden z gołębi nie ucieknie.

Udaj się do ciemnego znaku X na fioletowym dywanie, przy klatkach będziemy weryfikować, czy gołąb jest wystarczająco stary, aby przenieść wiadomość, czy też jest młodym pisklęciem, które nie jest w stanie dokonać dostawy. W tym segmencie używane są kolejne cztery stałe zmienne: purple_pen, yellow_pen, white_pen i pink_pen, odpowiadające poszczególnym kolorom dywanów. Użyjemy tej samej techniki, jak przy notatkach, korzystając z drugiej utworzonej klasy.

Użyj bloków try/except oraz else z niestandardowym wyjątkiem UnsuitableSelection, aby sprawdzić, czy gołąb jest wystarczająco stary do dostarczenia wiadomości. Blok try sprawdza, czy stała zmienna reprezentująca klatkę zawiera odpowiedniego gołębia, poprzez weryfikację, czy ptak jest młodszy niż dwa (2) lata. Jeśli gołąb jest nieodpowiedni, zostanie wywołany blok except, w przeciwnym razie aktywowany zostanie blok else, który pozwala dodać gołębia do listy prep, aby dostarczył wiadomość.

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

Udaj się do każdego ciemnego znaku X na kolorowych dywanach i użyj tej sekwencji z odpowiednią stałą zmienną odpowiadającą danemu kolorowemu dywanowi. Gdy zbierzesz gołębie i notatki, udaj się do złotego znaku X na samym dole i użyj funkcji place() z utworzoną listą prep, aby wysłać gołębie do dostarczenia wiadomości i ukończenia poziomu.

Księga Kodów