Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Undantagshantering
Anpassa undantagsklasser

Mål

Verifiera det insamlade regnvattnet och säkerställ att det bearbetas och överförs korrekt genom att anpassa undantagsklasser.

I den fjärran änden av takkomplexet finns en cisternehållare med uppsamlat regnvatten; detta vatten filtreras och transporteras genom byggnaden för olika ändamål. Några ventiler på den övre väggen reglerar vattenflödets tryck, medan det sista förrådet huserar olika vattenvärmare. Att hantera maskiner kan vara knepigt, men driften 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 egna undantag.

Det finns två anpassade undantagsklasser uppsatta i kodredigeraren; din förmåga att använda dem kommer vara avgörande för felsökning av eventuella maskinproblem du stöter på. Den första är ett undantag för att felsöka vattentrycket. Det är avsett 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 __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")

Den andra anpassade undantagsklassen är avsedd att reglera temperaturen i vattenvärmarna. Om temperaturen är för låg eller för hög måste du ange en ny temperatur som ett 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 __str__(self): await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Börja med att 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 av dessa som reglerar trycket på vattnet som pumpas från cisternen. Det finns fyra (4) variabelkonstanter: green_pressure, red_pressure, blue_pressure och orange_pressure, vilka håller trycket i varje tank för respektive färgad matta.

På alla de ljusa X-märkena, använd try/except och else kodblocken för att verifiera om trycket i varje tank är lämpligt. Om trycket är under 100 eller om det är över 300 ska det anpassade PressureError-undantaget kastas, med trycket angivet som ett argument. När det utlöses kommer felkoden att visas och en korrigering genomföras, annars triggas else-avsnittet som bekräftar att trycket i tanken är korrekt. Till exempel:

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

Gör detta på alla ljusa X-märken, använd de variabelkonstanter som motsvarar varje färgad matta och verifiera eller justera tryckventilerna vid behov.

När du är klar, gå till det gyllene X-märket och använd funktionen open() för att komma åt förrådet med vattenvärmaren. Väl inne, gå till det gyllene X-märket som finns inne i förrådet och använd funktionen read() för att läsa notisen vid disken. Denna notis kommer att ge dig information om vad den ideala temperaturen för varje vattenvärmare är.

När du har fått informationen om varje temperatur, gå över till det mörka X-märket över den lila mattan. Här ska vi använda try/except och else kodsekvensen för att verifiera att vattenvärmarna har rätt temperatur. Det finns ytterligare fyra (4) variabelkonstanter kopplade till de färgade mattorna: purple_temperature, yellow_temperature, pink_temperature och white_temperature.

I denna sekvens ska vi kontrollera om temperaturen är under 100; om den är det, kastas TemperatureError-undantaget. Som ett anpassat undantag tar det ett argument, i detta fall måste du ange temperaturen som lästs i notisen för att undantagets motåtgärd ska kunna genomföras korrekt. Till exempel:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )

Gör detta för alla vattenvärmare. På varje X-märke, när du står vänd mot värmarna, kör sekvensen med de variabelkonstanter som motsvarar de korrekta färgade mattorna för att slutföra nivån.

Kodbok