Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Kivételkezelés
Egyéni kivételosztályok testreszabása
Célkitűzés
Ellenőrizze az összegyűjtött esővizet, és győződjön meg róla, hogy azt megfelelően dolgozzák fel és továbbítják, kivételosztályok testre szabásával.
A tetőkomplexum távoli végén egy tartály található az összegyűjtött esővíz számára, melyet szűrnek és különféle célokra juttatnak el az épületben. Néhány szelep az felső falon szabályozza a beáramló víznyomást, míg az utolsó raktárban különféle vízmelegítők kapnak helyet. A gépek működtetése kihívást jelenthet, ám hatékonyan optimalizálható a hibakódok meghatározásával és megfelelő ellenintézkedések bevezetésével. Ezt úgy érheted el, hogy testre szabott kivételosztályokat hozol létre a saját egyedi kivételeidhez.
A kódszerkesztőben két egyedi kivételosztály van definiálva, amelyeket elengedhetetlenül meg kell tanulnod használni a gépszerelési problémák elhárításához. Az első kivétel a víznyomás hibakeresését segíti. Ezt a szelepekkel együtt kell használni annak ellenőrzésére, hogy a víz megfelelően áramlik-e be az épületbe, illetve szükséges-e a nyomás beállítása. Attól függően, hogy a nyomás kevesebb-e, mint 100, vagy meghaladja-e a 300 értéket, a kivétel eltérő műveletet hajt végre; a nyomás értékét a felhasználónak kell megadnia argumentumként. Aktiválás esetén egy egyedi felugró ablak jelenik meg, ami hibakódot és üzenetet tartalmaz.
class PressureError(Exception):
def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404):
self.pressure = pressure
self.message = message
self.error_code = error_code
super().__init__(self.message)
async def eval(self):
await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure))
if self.pressure < 100:
return ("Valve has been closed")
if self.pressure > 360:
return ("Valve has been opened")
A második egyedi kivételosztály a vízmelegítők hőmérsékletének szabályozására szolgál. Ha a hőmérséklet túl alacsony vagy túl magas, akkor új hőmérsékletet kell megadnod argumentumként a hiba kijavításához.
class TemperatureError(Exception):
def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808):
self.temp = temp
self.message = message
self.error_code = error_code
super().__init__(self.message)
async def eval(self):
await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp))
return ("Temperature Corrected")
Kezdésként sétálj a zöld szőnyegen található világos X jelzéshez, és fordulj a szelepvel rendelkező tartály felé, melyből négy (4) szelep szabályozza a cisternából pumpált víz nyomását. Négy (4) változó állandó van: green_pressure, red_pressure, blue_pressure és orange_pressure, amelyek az adott színű szőnyegek tartályainak nyomását tárolják.
Minden világos X jelzésnél használd a try / except és else kódrészletek sorozatát annak ellenőrzésére, hogy az egyes tartályok nyomása megfelelő-e. Ha a nyomás kevesebb, mint 100, vagy nagyobb, mint 300, akkor emeld a saját PressureError kivételt, és add át paraméterként a nyomást. Aktiválás esetén a hibakódot dobja, és elindítja a javítást, egyébként az else ág fut, megerősítve, hogy a tartály nyomása megfelelő. Például:
try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )
Ismételd meg ezt minden világos X jelzésnél, a megfelelő szőnyegszínekhez tartozó változó állandókat használva, és szükség szerint ellenőrizd vagy állítsd be a nyomásszelepeket.
Miután elkészültél, sétálj a fényes arany X jelzéshez, és használd az open() függvényt, hogy belépj a vízmelegítős raktárba. Amint belépsz, sétálj arra az arany X jelzésre, amely a raktáron belül található, és használd a read() függvényt, hogy elolvasd a pultra helyezett emlékeztetőt. Ez az emlékeztető megadja, hogy mi az egyes vízmelegítők ideális hőmérséklete.
Ha megvannak az adatok az egyes hőmérsékletekről, sétálj át a lila szőnyegen található sötét X jelzéshez, ahol a try/except és else kódszekvenciát használjuk annak ellenőrzésére, hogy a vízmelegítők megfelelő hőmérsékleten működnek-e. Négy (4) további változó állandó tartozik a szőnyegekhez: purple_temperature, yellow_temperature, pink_temperature és white_temperature.
Ebben a sorozatban ellenőrizzük, hogy a hőmérséklet kevesebb-e, mint 100. Ha igen, akkor emeld a TemperatureError kivételt. Mivel ez egy testre szabott kivétel, ami paramétert vár, ebben az esetben az emlékeztetőből leolvasott hőmérsékletet kell megadnod, hogy a kivétel megfelelően végrehajtsa a javító intézkedést. Például:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: error = await x.eval() player.speak(error) else: player.speak( "Temperature is ok" )
Ismételd meg ezt minden vízmelegítőnél. Minden egyes X jelzésnél, miközben a melegítőkre nézel, hajtsd végre a sorozatot a megfelelő szőnyegszínekhez tartozó változó állandókat használva a szint teljesítéséhez.