Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Uitzonderingsafhandeling
Aanpassen van exceptieklassen

Doelstelling

Controleer het verzamelde regenwater en zorg ervoor dat het correct wordt verwerkt en overgebracht door aangepaste exception classes te maken.

Aan het einde van het dakcomplex bevindt zich een reservoir met verzameld regenwater; dit water wordt gefilterd en door het gebouw verspreid voor diverse doeleinden. Enkele kleppen op de bovenste muur regelen de stromende waterdruk, terwijl de laatste opslagruimte verschillende waterverwarmers huisvest. Het bedienen van de machines kan lastig zijn; echter, de werking kan effectief gestroomlijnd worden door foutcodes op te sommen en effectieve tegenmaatregelen op te zetten. Dit wordt bereikt door exception classes aan te passen die je voor je eigen exceptions maakt.

Er zijn twee aangepaste exception classes in de code-editor ingesteld, en jouw vermogen om ze te gebruiken zal essentieel zijn voor het oplossen van eventuele machineproblemen. De eerste is een exception voor het oplossen van problemen met waterdruk. Deze is bedoeld om samen met de kleppen te worden gebruikt om te garanderen dat er correct water in het complex stroomt of dat de druk moet worden aangepast. Afhankelijk van of de druk onder 100 of boven 300 ligt, wordt een andere actie door de exception uitgevoerd. De druk is een argument dat door de gebruiker moet worden opgegeven. Zodra het geactiveerd wordt, verschijnt er een aangepast pop-upvenster met een foutcode en bericht.

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")

De tweede aangepaste exception class is bedoeld om de temperatuur in de waterverwarmers te regelen; als de temperatuur te laag of te hoog is, moet je als argument een nieuwe temperatuur opgeven om de fout te corrigeren zodra deze optreedt.

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")

Begin door naar het lichte X-teken op het groene tapijt te lopen en richt je naar de tank met een klep; er zijn vier (4) van deze die de druk van het water dat uit de reservoir wordt gepompt regelen. Er zijn vier (4) variabele constanten: green_pressure, red_pressure, blue_pressure en orange_pressure. Deze bevatten de druk van elke tank van de overeenkomstige gekleurde tapijten.

Op alle lichte X-tekens, gebruik de try/except en else codeblok sequenties om te verifiëren of de druk in elke tank geschikt is. Als de druk onder 100 ligt of boven 300 is, roep dan de aangepaste PressureError exception op en voeg de druk als argument toe. Als deze geactiveerd wordt, wordt de foutcode opgehaald en een correctie uitgevoerd, anders wordt de else clausule geactiveerd, wat bevestigt dat de druk in de tank geschikt is. Bij voorbeeld:

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" )

Doe dit op alle lichte X-tekens, gebruikmakend van de variabele constanten die overeenkomen met elk van de gekleurde tapijten, om de drukkleppen te verifiëren of aan te passen indien nodig.

Ga vervolgens naar het gouden X-teken en gebruik de functie open() om toegang te krijgen tot de opslagruimte met de waterverwarmer. Eenmaal binnen, ga naar het gouden X-teken dat zich in de opslagruimte bevindt en gebruik de functie read() om de memo op de toonbank te lezen. Deze memo zal je informeren over de ideale temperatuur voor elke waterverwarmer.

Zodra je de informatie over de temperaturen hebt, ga dan naar het donkere X-teken op het paarse tapijt. Hier gebruiken we de try/except en else code sequentie om te verifiëren of de waterverwarmers de juiste temperatuur hebben. Er zijn vier (4) extra variabele constanten gekoppeld aan de gekleurde tapijten: purple_temperature, yellow_temperature, pink_temperature en white_temperature.

In de sequentie zullen we controleren of de temperatuur onder 100 ligt. Indien dit het geval is, roepen we de TemperatureError exception op. Als een aangepaste exception neemt deze een argument; in dit geval moet je de in de memo gelezen temperatuur opgeven om de tegenmaatregel van de exception correct uit te voeren. Bij voorbeeld:

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" )

Doe dit voor alle waterverwarmers. Op elk X-teken, terwijl je naar de verwarmers kijkt, voer je de sequentie uit met de variabele constanten die overeenkomen met de juiste gekleurde tapijten, zodat je het level voltooit.

Codeboek