Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Undantagshantering
Anpassade undantag
Mål
Använd anpassade undantag för att samla in meddelanden med produktorder och skicka ut dem med brevduva.
Vissa meddelanden distribueras över gården och andra stationer med hjälp av brevduvor, så det vore en bra idé att skicka ut några för att ligga steget före schemat. Vi har fångat upp fel med vanliga undantag, men ibland kan det löna sig att skapa egna anpassade undantag för mycket specifika situationer. Vi ska hämta meddelanden och välja duvor genom att identifiera rätt objekt med hjälp av våra egna anpassade undantag.
Anpassade undantag skapas genom att definiera klasser, genom att lägga till (Exception)-klusan kan du använda en klass för att hantera undantag. För våra ändamål kommer vi att skapa två: InvalidLocation som aktiveras när en specifik sträng inte uppfyller verifieringen, och UnsuitableSelection som används för att kontrollera om ett nummer överstiger en viss gräns.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Nu när klasserna är definierade är det dags att hämta memona så att de kan skickas ut. Skapa en lista med namnet prep för att lagra och kombinera de komponenter som behövs för det kommande utbytet. Gå till den mörka X-markeringen över den röda mattan, på raden med bord med X-markeringar framför, där vi kommer att söka efter memon som är adresserade till den västra sektorn av gården.
Det finns fyra variabelkonstanter i detta segment: red_memo, blue_memo, green_memo och orange_memo. Endast memon som är märkta för leverans till "west"-sektorn ska samlas in så att de kan skickas ut. För att avgöra om vi ska ta med memon eller inte, kommer vi att använda try/except och else kodblock i kombination med det anpassade undantaget InvalidLocation. För att använda det anpassade undantaget, låt try kontrollera om memon är märkt med "west" och om inte, kasta undantaget. except-blocket bekräftar att memon är ogiltig, och else-blocket samlar, och lägger till i listan prep, memon om den visar sig vara avsedd för "west"-sektorn. Till exempel:
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)
Gå till varje mörk X-markering över de färgade mattorna framför borden och kör exceptionssekvensen med de korrekta variabelkonstanterna som motsvarar varje färg.
När du har samlat memona, gå till den gyllene X-markeringen framför dörren och använd funktionen open() för att komma åt duvhagen. Väl inne, gå till den ljusa X-markeringen, vänd dig om och använd funktionen close() för att stänga dörren så att ingen duva kan komma ut.
Gå till den mörka X-markeringen på den lila mattan, vid burarna kommer vi att verifiera om duvan är tillräckligt gammal för att flyga ett meddelande eller om den är en nykläckt fågel som inte kan genomföra en leverans. Det finns fyra ytterligare variabelkonstanter i detta segment: purple_pen, yellow_pen, white_pen och pink_pen som motsvarar varje färgad matta. Vi kommer att använda samma teknik som med memona, med hjälp av den andra klassen som skapades.
Använd try/except och else kodblock med det anpassade undantaget UnsuitableSelection för att avgöra om duvan är gammal nog att genomföra leveransen. try-blocket kontrollerar om variabelkonstanten som representerar buren har en lämplig duva genom att verifiera om fågeln är yngre än två (2) år. Om duvan är olämplig aktiveras except-blocket, annars aktiveras else-blocket vilket låter dig lägga till en duva i listan prep för att leverera meddelandet.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Gå till varje mörk X-markering på de färgade mattorna och använd denna sekvens med den korrekta variabelkonstanten som motsvarar rätt färg på mattan. När du har samlat duvorna och meddelandena, gå till den gyllene X-markeringen längst ner och använd funktionen place() med listan prep du skapade för att skicka ut duvorna för att leverera meddelanden och slutföra nivån.