Coding for KidsCoding for Kids
Kreativní ÚrovněVýzvyPrůvodce pro Učitele
Hlasovat pro funkce
Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň

Zpracování výjimek
Vlastní výjimky

Cíl

Použijte vlastní výjimky pro sběr zpráv s objednávkami produktů a jejich odeslání pomocí holuba poštovního.

Některé zprávy jsou rozesílány po farmě a dalších stanicích pomocí poštovního holuba, bylo by dobré odeslat několik z nich, abychom zůstali před plánem. Doposud jsme chyby zachytávali pomocí běžných výjimek, ale někdy vám může přinést užitek vytvoření vlastních výjimek pro velmi specifické situace. Budeme vybírat zprávy a holuby identifikací správných položek pomocí našich vlastních výjimek.

Vlastní výjimky se vytvářejí definováním tříd; přidáním klauzule (Exception) můžete třídu využít k vyvolávání výjimek. Pro naše účely vytvoříme dvě: InvalidLocation, která je aktivována, když určitý řetězec neprojde ověřením, a UnsuitableSelection, která slouží k ověření, zda číslo nepřekračuje určitý práh.

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

Nyní, když máme třídy nastaveny, je čas získat vzkazy, aby mohly být odeslány. Vytvořte seznam s názvem prep, do kterého uložíte a spojíte komponenty potřebné pro nadcházející výměnu. Jděte k tmavé značce X nad červeným kobercem, na řadě stolů s X značkami vpředu budeme hledat vzkazy s objednávkami směřujícími do západní části farmy.

V tomto segmentu jsou použity čtyři proměnné konstanty: red_memo, blue_memo, green_memo a orange_memo. Sbírají se pouze vzkazy, které jsou určeny k doručení v sektoru "west", aby mohly být odeslány. K určení, zda vzkaz vezmeme nebo ne, budeme používat bloky kódu try/except a else ve spojení s vlastní výjimkou InvalidLocation. Abychom použili vlastní výjimku, nechť blok try ověří, zda je vzkaz označen jako "west" a pokud ne, vyvolá výjimku. Blok except potvrdí, že vzkaz je neplatný, a blok else vzkaz shromáždí a přidá do seznamu prep, pokud se ukáže, že je určen do sektoru "west". Například:

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)

Jděte k jednotlivým tmavým značkám X nad barevnými koberci před stoly a spusťte sekvenci výjimek s použitím správných proměnných konstant odpovídajících jednotlivým barvám.

Jakmile shromáždíte vzkazy, jděte ke zlaté značce X před dveřmi a použijte funkci open() pro přístup k holubníkům. Jakmile uvnitř, jděte k lehké značce X, otočte se, použijte funkci close() k zavření dveří, aby se zajistilo, že žádný holub neuteče.

Jděte k tmavé značce X nad fialovým kobercem, u ohrad (pens) budeme ověřovat, zda je holub dostatečně starý na to, aby mohl doručit zprávu, nebo zda je ještě mládě, které nedokáže doručit zásilku. V tomto segmentu budeme používat čtyři další proměnné konstanty: purple_pen, yellow_pen, white_pen a pink_pen, odpovídající každému barevnému koberci. Budeme používat stejnou techniku jako u vzkazů s využitím druhé vytvořené třídy.

Použijte bloky kódu try/except a else s vlastní výjimkou UnsuitableSelection ke zjištění, zda je holub dostatečně starý na doručení zprávy. Blok try ověřuje, zda proměnná konstanta představující ohradu obsahuje vhodného holuba kontrolou, zda je pták mladší než dva (2) roky. Pokud je holub nevhodný, spustí se blok except, jinak se aktivuje blok else, který umožní přidat holuba do seznamu prep, aby mohl doručit zprávu.

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

Jděte ke každé tmavé značce X nad barevnými koberci a použijte tuto sekvenci se správnou proměnnou konstantou odpovídající správnému barevnému koberci. Jakmile shromáždíte holuby a vzkazy, jděte ke zlaté značce X úplně dole a použijte funkci place() se seznamem prep, který jste vytvořili, abyste odeslali holuby doručit zprávy a dokončili úroveň.

Kniha Kódu