Coding for KidsCoding for Kids
Niveluri CreativeProvocăriGhid pentru Profesori
Votează pentru funcții
Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Gestionarea excepțiilor
Personalizarea claselor de excepții

Obiectiv

Verificați apa de ploaie colectată și asigurați-vă că este procesată și transferată corect prin personalizarea claselor de excepții.

La capătul complexului de acoperiș se află o cistorină de apă de ploaie colectată, această apă este filtrată și distribuită în întregul imobil pentru diverse scopuri. Unele supape de pe peretele superior controlează presiunea apei care curge, în timp ce ultimul depozit găzduiește diverse încălzitoare de apă. Operarea utilajelor poate fi complicată, totuși funcționarea lor poate fi eficient îmbunătățită prin stabilirea codurilor de eroare și implementarea de contramăsuri eficiente. Acest lucru se realizează prin personalizarea claselor de excepții pe care le creați pentru excepțiile personalizate.

Există două clase de excepții personalizate setate în editorul de cod; abilitatea de a le utiliza va fi esențială pentru diagnosticarea oricăror probleme la utilaje pe care le întâmpinați. Prima este o excepție pentru diagnosticarea presiunii apei. Aceasta este destinată să fie folosită împreună cu supapele pentru a asigura că apa intră corespunzător în complex sau, în cazul în care presiunea trebuie ajustată. În funcție de faptul că presiunea este sub 100 sau peste 300, se va efectua o acțiune diferită prin intermediul excepției, presiunea fiind un argument pe care utilizatorul trebuie să-l furnizeze. Odată activată, apare o fereastră personalizată care afișează un cod de eroare și un mesaj.

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

A doua clasă de excepții personalizate este destinată să moduleze temperatura în încălzitoarele de apă; dacă temperatura este prea scăzută sau prea ridicată, trebuie să introduceți o nouă temperatură ca argument pentru a corecta eroarea odată ce aceasta apare.

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

Pentru a începe, mergeți către semnul X luminos de pe covorul verde și îndreptați-vă către rezervorul cu o supapă; există patru (4) astfel de supape care reglează presiunea apei pompată din cistorină. Există patru constante variabile: green_pressure, red_pressure, blue_pressure și orange_pressure, care dețin presiunea fiecărui rezervor corespunzător covoarelor de culori respective.

La toate semnele X luminoase, utilizați secvențele de blocuri de cod try/except și else pentru a verifica dacă presiunea în fiecare rezervor este adecvată. Dacă presiunea este sub 100 sau dacă este peste 300, ridicați excepția personalizată PressureError și furnizați presiunea ca argument. Dacă este activată, aceasta va ridica codul de eroare și va emite o corecție, altfel calea else este declanșată, confirmând că presiunea în rezervor este adecvată. De exemplu:

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

Faceți acest lucru la toate semnele X luminoase, folosind constantele variabile care corespund fiecărui covor colorat și fie verificați, fie ajustați supapele de presiune după cum este necesar.

Odată ce ați terminat, mergeți la semnul X auriu și utilizați funcția open() pentru a accesa depozitul cu încălzitorul de apă; odată ajuns înăuntru, mergeți la semnul X auriu din depozit și folosiți funcția read() pentru a citi nota de pe tejghea. Această notă vă va oferi informații despre temperatura ideală pentru fiecare încălzitor de apă.

Odată ce ați obținut informațiile despre fiecare temperatură, mergeți către semnul X întunecat de pe covorul mov; aici vom folosi secvența de cod try/except și else pentru a verifica dacă încălzitoarele de apă au temperatura corectă. Există încă patru constante variabile asociate cu covoarele colorate: purple_temperature, yellow_temperature, pink_temperature și white_temperature.

În secvență, vom verifica dacă temperatura este sub 100; dacă este, vom ridica excepția TemperatureError. Fiind o excepție personalizată, aceasta primește un argument; în acest caz, trebuie să introduceți temperatura citită din notă pentru a executa corect contramăsura excepției și a corecta problema. De exemplu:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )

Faceți acest lucru pentru toate încălzitoarele de apă; la fiecare semn X, în timp ce vă aflați în fața încălzitoarelor, executați secvența folosind constantele variabile corespunzătoare covoarelor de culori potrivite pentru a finaliza nivelul.

Carte de Cod