Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Undtagelseshåndtering
Tilpasning af undtagelsesklasser
Mål
Verificér det opsamlede regnvand, og sørg for, at det bliver behandlet og overført korrekt ved at tilpasse undtagelsesklasser.
For enden af tagkomplekset er der en cisterne med opsamlet regnvand. Dette vand bliver filtreret og overført rundt i bygningen til forskellige formål. Nogle ventiler på den øverste væg kontrollerer vandtrykket, der strømmer, mens det sidste opbevaringsrum huser forskellige vandvarmere. Drift af maskiner kan være vanskeligt, men deres funktion kan effektiviseres ved at definere fejlkoder og oprette effektive modforanstaltninger. Dette opnås ved at tilpasse undtagelsesklasser, som du opretter til dine brugerdefinerede undtagelser.
Der er oprettet to brugerdefinerede undtagelsesklasser i kodeeditoren, og din evne til at bruge dem vil være afgørende for fejlfinding af eventuelle maskinproblemer, du støder på. Den første er et undtag, der bruges til at fejlfinding af vandtryk. Den er beregnet til at blive brugt sammen med ventilerne for at sikre, at vandet strømmer korrekt ind i komplekset, eller hvis trykket skal justeres. Afhængigt af om trykket er under 100 eller over 300, udføres en forskellig handling af undtagelsen; trykket er et argument, som brugeren skal angive. Når den udløses, vises en brugerdefineret popup med en fejlkode og 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 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 anden brugerdefinerede undtagelsesklasse er beregnet til at modulere temperaturen i vandvarmerne. Hvis temperaturen er for lav eller for høj, skal du angive en ny temperatur som et argument 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 eval(self):
await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp))
return ("Temperature Corrected")
For at komme i gang, gå til det lyse X-mærke over den grønne måtte og vend dig mod tanken med en ventil. Der er fire (4) af disse, som regulerer trykket for vandet, der pumpes fra cisternen. Der er fire (4) variable konstanter: green_pressure, red_pressure, blue_pressure og orange_pressure, som angiver trykket i hver af tankene svarende til de tilhørende farvede måtter.
På alle de lyse 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 over 300, skal du rejse den brugerdefinerede PressureError undtagelse og tilføje trykket som et argument. Hvis den udløses, vises fejlkoden og en korrektion initieres, ellers udløses 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: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )
Gør dette på alle de lyse X-mærker ved at bruge de variable konstanter, der svarer til hver af de farvede måtter, for enten at bekræfte eller justere trykventilerne efter behov.
Når du er færdig, skal du gå til det gyldne X-mærke og bruge open() funktionen for at få adgang til opbevaringsrummet med vandvarmeren. Når du er inde, skal du gå til det gyldne X-mærke, som er placeret i opbevaringsrummet, og bruge read() funktionen for at læse notatet ved disken. Dette notat vil give dig information om, hvad den ideelle temperatur for hver af vandvarmerne er.
Når du har fået informationen om hver af temperaturerne, skal du gå over til det mørke X-mærke over den lilla måtte. Her vil vi bruge try/except og else kode-sekvensen 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 denne sekvens skal vi verificere, om temperaturen er under 100. Hvis den er, vil vi rejse TemperatureError undtagelsen. Som en tilpasset undtagelse tager den et argument. I dette tilfælde skal du indtaste den temperatur, der fremgår af notatet, så undtagelsens modforanstaltning korrekt kan udføres for at rette fejlen. For eksempel:
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 dette for alle vandvarmerne. På hvert X-mærke, mens du vender dig mod varmerne, skal du køre sekvensen med de variable konstanter, der svarer til de korrekte farvede måtter, for at fuldføre niveauet.