Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Kivételkezelés
Kivételosztályok testreszabása
Célkitűzés
Ellenőrizd az összegyűjtött esővizet, és győződj meg róla, hogy megfelelően feldolgozva és átadva kerül, kivételosztályok testreszabásával.
A tetőkomplexum legvégén található egy esővízgyűjtő tartály, amelyből a vizet szűrik, és különböző célokra osztják el az épületben. Bizonyos szelep a felső falon szabályozza az áramló víznyomást, míg az utolsó raktárban több vízmelegítő található. A gépek működtetése kihívást jelenthet, de a hibakódok meghatározásával és a hatékony ellenintézkedések bevezetésével a működés egyszerűsíthető. Ezt úgy éred el, hogy testreszabott kivételosztályokat hozol létre az egyedi kivételekhez.
A kódszerkesztőben két testreszabott kivételosztály van definiálva, melyek használata létfontosságú lesz az esetleges gépészeti problémák elhárításához. Az első kivételt a víznyomás hibakeresésére hozták létre. Ezt szelepekkel együtt kell használni annak biztosítására, hogy a víz megfelelően áramoljon a komplexumba, vagy ha a nyomást módosítani kell. Attól függően, hogy a nyomás a 100 alatti vagy a 300 feletti értéket vesz fel, a kivétel más-más műveletet hajt végre, a nyomás pedig argumentumként kerül átadásra. Aktiváláskor egy egyedi felugró ablak jelenik meg hibakóddal és üzenettel.
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 __str__(self):
await player.write("[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 testreszabott kivételosztályt a vízmelegítők hőmérsékletének szabályozására tervezték. Ha a hőmérséklet túl alacsony vagy túl magas, akkor egy új hőmérsékletet kell argumentumként megadnod a hiba bekövetkezte utáni korrigáláshoz.
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 __str__(self):
await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp))
return ("Temperature Corrected")
A kezdéshez menj a zöld szőnyegen lévő világos X jelzéshez, és nézz szembe a szeleppel ellátott tartálynál, melyből négy (4) van, amelyek a tartályból pumpált víz nyomását szabályozzák. Négy (4) változó konstans létezik: green_pressure, red_pressure, blue_pressure és orange_pressure, melyek mindegyike az adott színű szőnyegekhez tartozó tartály nyomását tartalmazza.
Minden világos X jelzésnél használd a try/except és else kódrészlet sorrendeket annak ellenőrzésére, hogy az egyes tartályok nyomása megfelelő-e. Ha a nyomás 100 alatti, vagy ha 300 fölötti, emeld a testreszabott PressureError kivételt, és add át a nyomás értékét argumentumként. Aktiváláskor a kivétel hibakódot dob, és javítást hajt végre, ellenkező esetben az else ág fut le, 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: player.speak(x) else: player.speak( "Pressure is appropriate" )
Ezt tedd meg minden világos X jelzésnél, a megfelelő színes szőnyegekhez tartozó változó konstansokat használva, és szükség szerint ellenőrizd vagy állítsd be a nyomásszelepeket.
Miután elkészültél, menj a arany X jelzéshez, és használd az open() függvényt, hogy hozzáférj a vízmelegítőt tartalmazó raktárhoz. Miután beléptél, menj a raktáron belüli arany X jelzéshez, és használd a read() függvényt a pulthoz ragasztott üzenet elolvasásához. Ez az üzenet információt ad arról, hogy mi az ideális hőmérséklet az egyes vízmelegítők esetében.
Miután megszerezted az egyes hőmérsékletekre vonatkozó információkat, menj a lila szőnyegen lévő sötét X jelzéshez, ahol a try/except és else kódszekvenciát fogjuk használni annak ellenőrzésére, hogy a vízmelegítők megfelelő hőmérsékleten működnek-e. További négy (4) változó konstans tartozik a színes szőnyegekhez: purple_temperature, yellow_temperature, pink_temperature és white_temperature.
A szekvenciában ellenőrizzük, hogy a hőmérséklet 100 alatti-e, és ha igen, emeljük a TemperatureError kivételt. Testreszabott kivételként egy argumentumot vár; ebben az esetben a memo által leolvasott hőmérsékletet kell megadnod, hogy a kivétel megfelelő ellenintézkedést tudjon végrehajtani a hiba korrigálására. Például:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Ezt tedd meg minden vízmelegítőnél; minden X jelzésnél, miközben a melegítőkre nézel, futtasd le a szekvenciát a megfelelő színes szőnyegekhez tartozó változó konstansokkal a szint teljesítéséhez.