Edistynyt Python-kehityskurssi
Luku
>
Taso
Poikkeuskäsittely
Poikkeusluokkien mukauttaminen
Tavoite
Varmista, että kerätty sadevesi käsitellään ja siirretään oikein mukauttamalla poikkeusluokkia.
Kattokompleksin kauimpana sijaitsee sadeveden säiliö, josta vesi suodatetaan ja siirretään eri tarkoituksiin koko rakennuksen alueelle. Yläseinällä olevat venttiilit säätelevät virtaavan veden painetta, ja samalla viimeisessä varastohuoneessa on erilaisia vedenlämmittimiä. Koneiden käyttö voi olla hankalaa, mutta niiden toimintaa voidaan tehostaa määrittelemällä virhekoodit ja asettamalla tehokkaat vastatoimenpiteet. Tämä saavutetaan mukauttamalla poikkeusluokkia, jotka luot omia poikkeuksiasi varten.
Koodieditorissa on määritelty kaksi mukautettua poikkeusluokkaa, ja kyky käyttää niitä on ratkaisevaa mahdollisten konevikojen vianmäärityksessä. Ensimmäinen on poikkeus, jota käytetään vesipaineen vianmääritykseen. Sitä on tarkoitettu käytettäväksi venttiilien kanssa varmistaen, että vettä virtaa oikein kompleksiin tai että painetta voidaan säätää tarpeen mukaan. Riippuen siitä, onko paine alle 100 tai yli 300, poikkeus käynnistää erilaisen toimenpiteen. Paine annetaan argumenttina, jonka käyttäjän on toimitettava. Kun poikkeus aktivoituu, mukautettu ponnahdusikkuna, joka sisältää virhekoodin ja viestin, näytetään.
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")
Toinen mukautettu poikkeusluokka on tarkoitettu vedenlämmittimien lämpötilan säätämiseen. Jos lämpötila on liian matala tai liian korkea, sinun on annettava uusi lämpötila argumenttina, jotta virhe voidaan korjata sen ilmettyä.
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")
Aloita kävelemällä valon X-merkin luo vihreän maton yli ja päin säiliötä, jossa on venttiili. Näitä venttiilejä on yhteensä neljä (4), ja ne säätelevät cisternista pumpatun veden painetta.
Käytössä on neljä (4) muuttuvaa vakioarvoa: green_pressure, red_pressure, blue_pressure ja orange_pressure. Ne sisältävät kunkin säiliön paineen, joka vastaa maton väriä.
Kaikilla valon X-merkeillä käytä try/except ja else -koodilohkoja varmistaaksesi, että kunkin säiliön paine on sopiva. Jos paine on alle 100 tai yli 300, nosta mukautettu PressureError -poikkeus ja anna paine argumenttina. Jos poikkeus aktivoituu, se näyttää virhekoodin ja antaa korjausohjeen; muuten else-haara aktivoituu ja varmistaa, että säiliön paine on asianmukainen. Esimerkiksi:
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" )
Tee tämä kaikilla valon X-merkeillä, käyttäen kullekin värilliselle matolle vastaavia muuttuvia vakioarvoja, ja varmista tai säädä paineventtiilejä tarpeen mukaan.
Kun olet valmis, kävele kullanhohtoisen X-merkin luo ja käytä open()-funktiota päästäksesi varastohuoneeseen, jossa on vedenlämmitin. Kun olet sisällä, kävele varastohuoneessa olevaan kullanhohtoiseen X-merkkiin ja käytä read()-funktiota lukeaksesi tiskin päällä olevan muistion. Tämä muistio antaa sinulle tiedot siitä, mikä on kunkin vedenlämmitin optimaalinen lämpötila.
Kun sinulla on tieto kunkin lämpötilasta, kävele tumman X-merkin luo violetti maton päällä. Tässä käytämme try/except ja else -koodijonoa varmistaaksemme, että vedenlämmittimien lämpötila on oikea. Värimattoihin liittyy lisäksi neljä (4) muuttuvaa vakioarvoa: purple_temperature, yellow_temperature, pink_temperature ja white_temperature.
Jaksossa tarkistamme, onko lämpötila alle 100. Jos on, nostamme TemperatureError-poikkeuksen. Koska kyseessä on mukautettu poikkeus, se ottaa argumenttina lämpötilan – tässä tapauksessa sinun on annettava muistiossa luettu lämpötila, jotta poikkeuksen vastatoimenpide voidaan suorittaa oikein. Esimerkiksi:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Tee tämä kaikille vedenlämmittimille. Jokaisella X-merkillä, kun olet kohdistautunut lämmittimiin, suorita koodijono käyttäen niihin liittyviä muuttuvia vakioarvoja, jotka vastaavat oikeaa värimattoa, jotta taso saadaan päätökseen.