Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Unntakshåndtering
Tilpasning av unntaksklasser
Mål
Sjekk oppsamlet regnvann og sørg for at det blir behandlet og overført korrekt ved å tilpasse unntaksklasser.
På den ene enden av takkomplekset finnes en tank med samlet regnvann. Dette vannet filtreres og overføres gjennom bygningen for ulike formål. Noen ventiler på den øvre veggen kontrollerer vanntrykket, mens det siste lageret huser forskjellige vannvarmere. Driftsmaskiner kan være utfordrende, men driften kan effektiviseres ved å definere feilkoder og sette opp effektive mottiltak. Dette oppnås ved å tilpasse unntaksklasser som du oppretter for dine egendefinerte unntak.
Det er definert to egendefinerte unntaksklasser i kodeeditoren, og din evne til å bruke dem vil være avgjørende for å feilsøke eventuelle maskinproblemer du møter. Den første er et unntak for å feilsøke vanntrykk. Den skal brukes sammen med ventilene for å sikre at vannet strømmer riktig inn i komplekset, eller for å justere trykket om nødvendig. Avhengig av om trykket er under 100 eller over 300 tas en annen handling av unntaket; trykket er et argument som brukeren må oppgi. Når utløst vises en egendefinert popup med en feilkode og melding.
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 andre egendefinerte unntaksklassen skal modulere temperaturen i vannvarmerne. Hvis temperaturen er for lav eller for høy, må du oppgi en ny temperatur som et argument for å rette feilen når den oppstå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 å starte, gå til det lyse X-merket over den grønne teppet og vend deg mot tanken med en ventil. Det finnes fire (4) av disse som regulerer trykket på vannet som pumpes fra tanken. Det finnes fire (4) variable konstanter: green_pressure, red_pressure, blue_pressure og orange_pressure. Disse representerer trykket for hver av tankene knyttet til de respektive fargede teppene.
På alle de lyse X-merkene, bruk try/except og else kodeblokksekvensene for å verifisere om trykket i hver tank er passende. Hvis trykket er under 100 eller over 300, skal du kaste det egendefinerte unntaket PressureError og legge til trykket som et argument. Hvis utløst, vil det generere feilkoden og iverksette en korreksjon, ellers vil else-delen bekrefte 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" )
Gjør dette ved alle de lyse X-merkene ved å bruke de variable konstantene som tilsvarer de fargede teppene, og verifiser eller juster trykkventilene etter behov.
Når du er ferdig, gå til det gylne X-merket og bruk open() funksjonen for å få tilgang til lageret med vannvarmeren. Når du er inne, gå til det gylne X-merket som befinner seg inne i lageret og bruk read() funksjonen for å lese notatet på disken. Dette notatet vil gi deg informasjon om hva som er ideell temperatur for hver av vannvarmerne.
Når du har fått informasjon om hver temperatur, gå til det mørke X-merket over det lilla teppet. Her vil vi bruke try/except og else kode-sekvensen for å verifisere at vannvarmerne har korrekt temperatur. Det finnes fire (4) andre variable konstanter knyttet til de fargede teppene: purple_temperature, yellow_temperature, pink_temperature og white_temperature.
I denne sekvensen vil vi sjekke om temperaturen er under 100. Hvis den er det, vil vi kaste TemperatureError unntaket. Som et tilpasset unntak tar det et argument, og i dette tilfellet må du oppgi temperaturen som ble lest fra notatet for å korrekt utføre unntakets mottiltak for å rette problemet. For eksempel:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Gjør dette for alle vannvarmerne. Ved hvert X-merke, mens du vender mot varmerne, kjør sekvensen med de variable konstantene som tilsvarer de riktige fargede teppene for å fullføre nivået.