Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Gestionarea Excepțiilor
Personalizarea claselor de excepții

Obiectiv

Verifică apa de ploaie colectată și asigură-te că este procesată și transferată corect prin personalizarea claselor de excepție.

La capătul îndepărtat al complexului de acoperiș se află o cisternă de apă de ploaie colectată; această apă este filtrată și transferată în întreaga clădire pentru diverse scopuri. Unele valve de pe peretele superior controlează presiunea apei care curge, în timp ce ultimul depozit adăpostește diferite boilere. Operarea mașinilor poate fi dificilă, însă funcționarea lor poate fi eficient optimizată prin evidențierea codurilor de eroare și stabilirea unor contramăsuri eficiente. Acest lucru se realizează prin personalizarea claselor de excepție pe care le creezi pentru excepțiile personalizate.

Există două clase de excepții personalizate configurate în editorul de cod, iar abilitățile tale de a le utiliza vor fi esențiale în rezolvarea eventualelor probleme ale mașinilor. Prima este o excepție pentru depanarea presiunii apei. Ea este concepută pentru a fi folosită împreună cu valvele pentru a asigura că apa curge corect în complex sau, în caz contrar, dacă presiunea trebuie ajustată. În funcție de faptul că presiunea este sub 100 sau peste 300 se ia o acțiune diferită de către excepție, presiunea fiind un argument pe care utilizatorul trebuie să-l furnizeze. Odată activată, se afișează un pop-up personalizat care conține 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 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")

A doua clasă de excepție personalizată este destinată să moduleze temperatura în boilere; dacă temperatura este prea scăzută sau prea ridicată, trebuie să introduci o temperatură nouă ca argument pentru a corecta eroarea imediat ce 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 eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Pentru a începe, mergi către semnul X luminos de pe covorul verde și îndreaptă-te spre rezervorul cu o valvă; există patru (4) dintre acestea care reglează presiunea apei pompată din cisternă. Există patru constante variabile: green_pressure, red_pressure, blue_pressure și orange_pressure; acestea rețin presiunea fiecărui rezervor al covoarelor corespunzătoare de culoare.

La toate semnele X luminoase, folosește secvențele de blocuri de cod try/except și else pentru a verifica dacă presiunea din fiecare rezervor este adecvată. Dacă presiunea este sub 100 sau peste 300, ridică excepția personalizată PressureError și adaugă presiunea ca argument. Dacă este activată, va afișa codul de eroare și va emite o corectare, altfel se activează clauza else, 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: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )

Fă acest lucru la toate semnele X luminoase, folosind constantele variabile care corespund fiecărui covor de culoare și fie verifică, fie ajustează valvele de presiune după cum este necesar.

Odată ce ai terminat, mergi la semnul X auriu și folosește funcția open() pentru a accesa depozitul cu boilerul; odată ce ești înăuntru, mergi la semnul X auriu din interiorul depozitului și folosește funcția read() pentru a citi nota de pe tejghea. Această notiță îți va oferi informații despre temperatura ideală pentru fiecare dintre boilere.

După ce ai informațiile despre fiecare temperatură, mergi la semnul X întunecat de pe covorul mov; aici vom folosi secvența de cod try/except și else pentru a verifica dacă boilerele au temperatura corectă. Există încă patru constante variabile asociate cu covoarele de culoare: 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. Ca excepție personalizată, aceasta primește un argument; în acest caz, trebuie să introduci temperatura citită în notiță pentru a executa corespunzător contramăsura excepției și a corecta problema. De exemplu:

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

Fă acest lucru pentru toate boilerele; la fiecare semn X, în timp ce te uiți către boilere, execută secvența folosind constantele variabile corespunzătoare covoarelor de culoare potrivite pentru a completa nivelul.

Carte de Cod