Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Undtagelseshåndtering
Tilpasning af undtagelsesklasser
Mål
Bekræft opsamlet regnvand og sørg for, at det behandles og overføres korrekt ved at tilpasse undtagelsesklasser.
For enden af tagkomplekset er der en cisterne med opsamlet regnvand, dette vand filtreres og overføres i hele bygningen til forskellige formål. Nogle ventiler på den øverste væg styrer vandtrykket, imens det sidste opbevaringsrum huser forskellige vandvarmere. Betjening af maskineriet kan være udfordrende, men driften kan effektiviseres ved at definere fejlkoder og etablere effektive modforanstaltninger. Dette opnås ved at tilpasse undtagelsesklasser, som du opretter til dine brugerdefinerede undtagelser.
Der er opsat to brugerdefinerede undtagelsesklasser i kodeeditoren, og din evne til at bruge dem vil være essentiel for at fejlsøge eventuelle problemer med maskineriet, du støder på. Den første er en undtagelse til fejlretning af vandtrykket. Den er beregnet til at blive brugt sammen med ventilerne for at sikre, at vand strømmer korrekt ind i komplekset, eller hvis trykket skal justeres. Afhængigt af om trykket er under 100 eller over 300 foretages en forskellig handling af undtagelsen; trykket er en parameter, som brugeren skal angive. Når den er trigget, vises et brugerdefineret pop-up-vindue med en fejlkode og en besked.
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 anden brugerdefinerede undtagelsesklasse er beregnet til at modulere temperaturen i vandvarmerne; hvis temperaturen er for lav eller for høj, skal du indtaste en ny temperatur som en parameter for at rette fejlen, når den opstå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")
For at starte skal du gå til det lette X-mærke over den grønne måtte og vende dig mod tanken med en ventil, der er fire (4) af disse, som regulerer trykket for det vand, der pumpes fra cisternen. Der er fire (4) variable konstanter: green_pressure, red_pressure, blue_pressure og orange_pressure, som indeholder trykket for hver af tankerne til de tilsvarende farvede måtter.
Ved alle de lette X-mærker skal du bruge try/except og else kodebloksekvenser for at verificere, om trykket i hver tank er passende. Hvis trykket er under 100 eller hvis det er over 300, skal du rejse den brugerdefinerede PressureError undtagelse og tilføje trykket som en parameter. Hvis den aktiveres, vil den udløse fejlkoden og give en korrektion, ellers aktiveres else-sætningen, som bekræfter, at trykket i tanken er passende. For eksempel:
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 dette ved alle de lette X-mærker ved at bruge de variable konstanter, der svarer til hver af de farvede måtter, og enten verificer eller juster trykventilerne efter behov.
Når du er færdig, skal du gå til det gyldne X-mærke og bruge open() funktionen til at få adgang til opbevaringsrummet med vandvarmeren; når du er indenfor, skal du gå til det gyldne X-mærke, der er inde i opbevaringsrummet, og bruge read() funktionen til at læse notatet på disken. Dette notat vil give dig information om, hvad den ideelle temperatur for hver af vandvarmerne er.
Når du har oplysningerne om hver af temperaturerne, skal du gå hen til det mørke X-mærke over den lilla måtte; her vil vi bruge try/except og else kodesekvensen for at verificere, at vandvarmerne har den korrekte temperatur. Der er fire (4) yderligere variable konstanter forbundet med de farvede måtter: purple_temperature, yellow_temperature, pink_temperature og white_temperature.
I sekvensen vil vi verificere, om temperaturen er under 100; hvis den er, vil vi rejse TemperatureError undtagelsen. Som en tilpasset undtagelse tager den en parameter; i dette tilfælde skal du indtaste den temperatur, der blev læst i notatet, for korrekt at udføre undtagelsens modforanstaltning for at rette fejlen. For eksempel:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Gør dette for alle vandvarmerne; på hvert X-mærke, mens du står over for varmerne, skal du udføre sekvensen ved hjælp af de variable konstanter, der svarer til de korrekte farvede måtter for at fuldføre niveauet.