Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Gestione delle eccezioni
Personalizzazione delle classi di eccezione
Obiettivo
Verifica l'acqua piovana raccolta e assicurati che venga processata e trasferita correttamente personalizzando le classi di eccezioni.
All'estremità del complesso del tetto si trova una cisterna di acqua piovana raccolta, questa acqua viene filtrata e trasferita in tutto l'edificio per vari scopi. Alcune valvole sulla parete superiore controllano la pressione dell'acqua in flusso, mentre l'ultima sala di stoccaggio ospita diversi scaldabagni. Il funzionamento delle macchine può essere complicato, tuttavia la loro operatività può essere ottimizzata efficacemente delineando codici di errore e impostando contromisure efficaci. Questo si ottiene personalizzando le classi di eccezioni che crei per le tue eccezioni personalizzate.
Nel codice dell'editor sono state impostate due classi di eccezioni personalizzate, e la tua capacità di usarle sarà essenziale per risolvere eventuali problemi delle macchine. La prima è un'eccezione per risolvere problemi relativi alla pressione dell'acqua. È destinata a essere usata con le valvole per garantire che l'acqua fluisca correttamente nel complesso o, in caso contrario, per regolare la pressione. A seconda che la pressione sia inferiore a 100 o superiore a 300, l'eccezione esegue un'azione diversa; la pressione è un argomento che l'utente deve fornire. Una volta attivata, viene visualizzato un pop-up personalizzato contenente un codice di errore e un messaggio.
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")
La seconda classe di eccezione personalizzata è destinata a modulare la temperatura negli scaldabagni; se la temperatura è troppo bassa o troppo alta, devi inserire una nuova temperatura come argomento per correggere l'errore una volta che si verifica.
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")
Per iniziare, cammina verso il segno X luminoso sul tappeto verde e rivolgi lo sguardo verso il serbatoio con una valvola; ce ne sono quattro (4) che regolano la pressione dell'acqua pompata dalla cisterna. Ci sono quattro costanti variabili: green_pressure, red_pressure, blue_pressure e orange_pressure, che contengono la pressione di ciascuno dei serbatoi dei rispettivi tappeti colorati.
Su tutti i segni X luminosi, utilizza le sequenze di blocchi di codice try/except e else per verificare se la pressione su ciascun serbatoio è appropriata. Se la pressione è inferiore a 100 o superiore a 300, solleva l'eccezione personalizzata PressureError e passa la pressione come argomento. Se attivata, verrà sollevato il codice di errore ed eseguita una correzione, altrimenti verrà attivata la clausola else confermando che la pressione nel serbatoio è appropriata. Per esempio:
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" )
Fai ciò su tutti i segni X luminosi, utilizzando le costanti variabili corrispondenti a ciascun tappeto colorato, e verifica o regola le valvole della pressione secondo necessità.
Una volta fatto, cammina verso il segno X dorato e usa la funzione open() per accedere al ripostiglio con lo scaldabagno; una volta dentro, cammina verso il segno X dorato che si trova all'interno del ripostiglio e usa la funzione read() per leggere il memo sul bancone. Questo memo ti fornirà informazioni sulla temperatura ideale per ciascuno degli scaldabagni.
Una volta ottenute le informazioni su ciascuna delle temperature, dirigiti verso il segno X scuro sul tappeto viola. Qui utilizzeremo la sequenza di codice try/except e else per verificare che gli scaldabagni abbiano la temperatura corretta. Ci sono altre quattro (4) costanti variabili associate ai tappeti colorati: purple_temperature, yellow_temperature, pink_temperature e white_temperature.
Nella sequenza verificheremo se la temperatura è inferiore a 100; in tal caso solleveremo l'eccezione TemperatureError. Essendo un'eccezione personalizzata, prende un argomento: in questo caso devi inserire la temperatura letta nel memo per eseguire correttamente la contromisura dell'eccezione e correggere il problema. Per esempio:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Fai questo per tutti gli scaldabagni: su ogni segno X, mentre ti trovi di fronte agli scaldabagni, esegui la sequenza utilizzando le costanti variabili corrispondenti ai tappeti colorati corretti per completare il livello.