Edistynyt Python-kehityskurssi
Luku
>
Taso

Poikkeuksien käsittely
Poikkeusluokkien räätälöinti

Tavoite

Varmista kerätty sadevesi ja varmista, että sitä käsitellään ja siirretään oikein räätälöityjen poikkeusluokkien avulla.

Rakennuksen katon toisella reunalla sijaitsee sadeveden keräyskatos, josta vettä suodatetaan ja siirretään rakennuksen eri osiin eri tarkoituksiin. Yläseinällä olevat venttiilit säätelevät virtaavan veden painetta, kun taas viimeisessä varastossa on erilaisia vedenlämmittimiä. Koneiden käyttö saattaa olla haastavaa, mutta niiden toimintaa voidaan tehostaa määrittelemällä virhekoodit ja asettamalla tehokkaita vastatoimia. Tämä saavutetaan räätälöityjen poikkeusluokkien avulla, jotka luot omia poikkeustilanteita varten.

Koodieditorissa on määritelty kaksi räätälöityä poikkeusluokkaa, ja niiden käyttö on olennaista, kun ratkot mahdollisia koneiden ongelmia. Ensimmäinen poikkeus liittyy vedenpaineen vianetsintään. Sitä käytetään venttiilien kanssa varmistamaan, että vettä virtaa oikein rakennukseen tai että painetta säädetään. Riippuen siitä, onko paine alle 100 tai yli 300, poikkeus suorittaa erilaisen toimenpiteen; paine on argumentti, jonka käyttäjän on annettava. Kun poikkeus laukeaa, mukautettu pop-up, jossa on virhekoodi ja viesti, 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 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")

Toinen räätälöity poikkeusluokka on tarkoitettu vedenlämmittimien lämpötilan säätämiseen. Jos lämpötila on liian alhainen tai liian korkea, sinun on syötettävä uusi lämpötila argumenttina korjataksesi virheen, kun se ilmenee.

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

Aloittaaksesi, kävele vihreällä matolla olevan valon X-merkin luo ja kohtaa säiliö, jossa on venttiili. Näitä on neljä (4), jotka säätelevät keräyskatosesta pumpatun veden painetta. On olemassa neljä (4) muuttuvaa vakioarvoa: green_pressure, red_pressure, blue_pressure ja orange_pressure, jotka pitävät sisällään kunkin venttiilin painetiedot vastaavan värimaton kohdalla.

Kaikissa valon X-merkeissä käytä try/except ja else -koodilohkojen yhdistelmiä varmistaaksesi, että kunkin säiliön paine on asianmukainen. Jos paine on alle 100 tai yli 300, nosta mukautettu PressureError-poikkeus ja lisää paine argumenttina. Jos virhe aktivoituu, se näyttää virhekoodin ja suorittaa korjaustoimenpiteen, muuten else-lohko laukeaa ja vahvistaa, että säiliön paine on kunnossa. Esimerkiksi:

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

Tee tämä kaikissa valon X-merkeissä käyttäen kutakin värimattoa vastaavia muuttuvia vakioita ja tarkista tai säädä painetta säätävät venttiilit tarpeen mukaan.

Kun olet valmis, kävele kultaiselle X-merkillä varustetulle alueelle ja käytä open()-funktiota päästäksesi varastoon, jossa on vedenlämmitin. Kun olet varastossa, kävele sisällä olevaan kultaiselle X-merkkiin ja käytä read()-funktiota lukeaksesi tiskillä olevan muistion. Tämä muisti antaa sinulle tietoa siitä, mikä on kunkin vedenlämmitin optimaalinen lämpötila.

Kun olet saanut tiedon kunkin lämpötilasta, kävele tummalle X-merkillä varustetulle alueelle violetin maton alla. Tässä käytämme try/except ja else -koodijärjestystä varmistaaksemme, että vedenlämmitin on oikeassa lämpötilassa. On olemassa neljä (4) muuttuvaa vakioarvoa värimattoihin liittyen: purple_temperature, yellow_temperature, pink_temperature ja white_temperature.

Järjestyksessä tarkistamme, onko lämpötila alle 100. Jos se on, nosta TemperatureError-poikkeus. Koska kyseessä on räätälöity poikkeus, se ottaa argumenttina lämpötilan, jonka olet luettu muistista, jotta poikkeuksen vastatoimi voi korjata virheen oikein. Esimerkiksi:

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

Tee sama kaikille vedenlämmittimille. Jokaisella X-merkillä, kun kohtaat lämmittimet, suorita yllä mainittu järjestys käyttäen kullekin värimatolle vastaavia muuttuvia vakioita, jotta taso saadaan päätökseen.

Koodikirja