Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Kivételkezelés
Egyedi kivételek
Cél
Használj egyedi kivételeket üzenetek összegyűjtésére a termék megrendelésekkel, majd küldd el őket fenyőmadárúton.
Néhány üzenet a gazdaságon és más állomásokon keresztül van eljuttatva hírnökmadárral, ezért jó ötlet néhányat kifejezni, hogy lépést tartsunk a menetrenddel. Eddig általános kivételekkel kezeltük a hibákat, de néha érdemes lehet saját, egyedi kivételeket létrehozni nagyon specifikus esetekre. Mi a saját egyedi kivételeink segítségével fogjuk kiválasztani az üzeneteket és a fenyőmadarakat, azáltal, hogy azonosítjuk a megfelelő elemeket.
Az egyedi kivételek osztályok létrehozásával készülnek el; a (Exception) kitétel hozzáadásával egy osztály újrahasznosítható kivételek végrehajtására. Számunkra két osztályt fogunk létrehozni: az InvalidLocation-t, amely akkor aktiválódik, ha egy adott string nem felel meg az ellenőrzésnek, és az UnsuitableSelection-t, amely azt ellenőrzi, hogy egy szám átlépi-e egy adott küszöbértéket.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Most, hogy az osztályok létre lettek hozva, itt az ideje, hogy megszerezzük a jegyzeteket, hogy el tudják küldeni azokat. Hozz létre egy prep nevű listát a következő csere során szükséges komponensek tárolására és összevonására. Sétálj a piros szőnyegen, a sötét X jelzéshez, az asztalok sorában, ahol X jelek vannak elöl, és keressük azokat a jegyzeteket, amelyek a gazdaság nyugati részére tartalmaznak rendeléseket.
Négy változó konstans van ebben a szakaszban: a red_memo, blue_memo, green_memo és az orange_memo. Csak azokat a jegyzeteket kell összegyűjteni, melyek a "west" szektorba kerülnek kiszállításra. Annak eldöntéséhez, hogy felvesszük-e a jegyzetet, try/except és else kódrészleteket használunk az InvalidLocation egyedi kivétellel együtt. Az egyedi kivétel használatához a try blokk ellenőrzi, hogy a jegyzet címkéje "west"-e, és ha nem, akkor kivételt dob. Az except blokk megerősíti, hogy a jegyzet érvénytelen, az else blokk pedig hozzáadja a jegyzetet a prep listához, ha kiderül, hogy a "west" szektorra tartozik. Például:
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)
Sétálj minden piros szőnyeget fedő sötét X jelzéshez az asztalok előtt található színes szőnyegekön, és futtasd le a kivételsorozatot a megfelelő színhez tartozó változó konstansokkal.
Miután összegyűjtötted a jegyzeteket, sétálj a kapu előtt elhelyezett arany X jelzéshez, és használd az open() függvényt, hogy hozzáférj a fenyőmadárólókhoz. Miután beléptél, sétálj a világos X jelzéshez, fordulj meg, használd a close() függvényt az ajtó bezárásához, hogy biztosan ne szabaduljanak el a fenyőmadarak.
Sétálj a lila szőnyegen található sötét X jelzéshez, az írásasztaloknál ellenőrizni fogjuk, hogy a fenyőmadár elég idős-e ahhoz, hogy üzenetet repüljön, vagy csak újszülött, aki nem tud kézbesíteni. Ebben a szakaszban további négy változó konstans használatos: a purple_pen, yellow_pen, white_pen és a pink_pen, amelyek a színes szőnyegeknek felelnek meg. Ugyanezt a technikát fogjuk használni, mint a jegyzetek esetében, a második osztály segítségével.
Használd a try/except és else kódrészleteket az UnsuitableSelection egyedi kivétellel, hogy megállapítsd, a fenyőmadár elég idős-e a kézbesítéshez. A try blokk ellenőrzi, hogy az adott színt képviselő változó konstans esetében a madár kevesebb-e, mint két (2) éves. Ha a fenyőmadár alkalmatlan, az except blokk aktiválódik, ellenkező esetben az else blokk engedélyezi, hogy hozzáadd a fenyőmadarat a prep listához az üzenet kézbesítéséhez.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Menj minden színes szőnyeg felett elhelyezett sötét X jelzéshez, és használd ezt a szekvenciát a megfelelő színhez tartozó változó konstans segítségével. Miután összegyűjtötted a fenyőmadarakat és az üzeneteket, sétálj a legalsó arany X jelzéshez, és használd a place() függvényt a létrehozott prep listával, hogy elküldd a fenyőmadarakat az üzenetek kézbesítésére, ezzel befejezve a szintet.