Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Undantagshantering
Anpassa undantagsklasser
Mål
Verifiera insamlat regnvatten och säkerställ att det bearbetas och överförs korrekt genom att anpassa undantagsklasser.
Längst bort i takkomplexet finns en cistern med insamlat regnvatten, detta vatten filtreras och överförs genom hela byggnaden för olika ändamål. Några ventiler på den övre väggen reglerar vattenflödet, medan det sista förrådet rymmer olika vattenvärmare. Att hantera maskineriet kan vara knepigt, men dess funktion kan effektiviseras genom att definiera felkoder och upprätta effektiva motåtgärder. Detta uppnås genom att anpassa undantagsklasser som du skapar för dina anpassade undantag.
Det finns två anpassade undantagsklasser uppsatta i kodredigeraren, och din förmåga att använda dem kommer att vara avgörande vid felsökning av eventuella maskinproblem du stöter på. Den första är ett undantag för att felsöka vattentrycket. Det är tänkt att användas med ventilerna för att säkerställa att vattnet flödar korrekt in i komplexet eller om trycket behöver justeras. Beroende på om trycket är under 100 eller över 300 vidtas en annan åtgärd av undantaget, där trycket är ett argument som användaren måste ange. När det utlöses visas en anpassad popup med en felkod och ett meddelande.
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")
Den andra anpassade undantagsklassen är avsedd att modulera temperaturen i vattenvärmarna, om temperaturen är för låg eller för hög måste du ange en ny temperatur som argument för att korrigera felet när det uppstår.
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")
För att börja, gå till det ljusa X-märket över den gröna mattan och vänd dig mot tanken med en ventil, det finns fyra (4) stycken som reglerar trycket på vattnet som pumpas från cisternen. Det finns fyra (4) variabelkonstanter: green_pressure, red_pressure, blue_pressure och orange_pressure, dessa håller trycket för varje tank på de motsvarande färgade mattorna.
På alla de ljusa X-märkena, använd try/except och else kodblocksekvenser för att verifiera om trycket i varje tank är lämpligt. Om trycket är under 100 eller om det är över 300 ska du höja det anpassade undantaget PressureError och lägga till trycket som ett argument. Om det aktiveras, kommer felkoden att visas och en korrigering utföras, annars aktiveras else-satsen som bekräftar att trycket i tanken är lämpligt. Till exempel:
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" )
Gör detta på alla ljusa X-märken, använd de variabelkonstanter som motsvarar varje färgad matta och verifiera eller justera tryckventilerna efter behov.
När du är klar, gå till det guldfärgade X-märket och använd funktionen open() för att komma åt förrådet med vattenvärmaren. När du är inne, gå till det guldfärgade X-märket som finns i förrådet och använd funktionen read() för att läsa viktlappen på disken. Denna viktlapp kommer ge dig information om vilken den ideala temperaturen för varje vattenvärmare är.
När du har informationen om varje temperatur, gå över till det mörka X-märket över den lila mattan. Här kommer vi att använda try/except och else kodsekvens för att verifiera att vattenvärmarna har rätt temperatur. Det finns ytterligare fyra (4) variabelkonstanter associerade med de färgade mattorna: purple_temperature, yellow_temperature, pink_temperature och white_temperature.
I denna sekvens kommer vi att verifiera om temperaturen är under 100, om så är fallet, höjer vi undantaget TemperatureError. Som ett anpassat undantag tar det ett argument, i detta fall måste du ange den temperatur som lästs på viktlappen för att korrekt utföra undantagets motåtgärd för att åtgärda problemet. Till exempel:
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" )
Gör detta för alla vattenvärmare, på varje X-märke när du står och tittar mot värmarna, kör sekvensen med hjälp av de variabelkonstanter som motsvarar de korrekta färgade mattorna för att slutföra nivån.