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 trattata e trasferita correttamente personalizzando le classi di eccezione.

All'estremità opposta del complesso del tetto c'è una cisterna di acqua piovana raccolta; quest'acqua viene filtrata e trasferita in tutto l'edificio per vari usi. Alcune valvole sulla parete superiore controllano la pressione dell'acqua in flusso, mentre l'ultimo magazzino ospita vari scaldabagni. Far funzionare le macchine può essere complicato, tuttavia il loro funzionamento può essere ottimizzato efficacemente delineando i codici di errore e stabilendo contromisure efficaci. Questo si ottiene personalizzando le classi di eccezione che crei per le tue eccezioni personalizzate.

Ci sono due classi di eccezione personalizzate impostate nell'editor di codice; la tua capacità di usarle sarà essenziale per risolvere eventuali problemi delle macchine. La prima è un'eccezione per diagnosticare la pressione dell'acqua. È destinata ad essere usata con le valvole per assicurare che l'acqua fluisca correttamente nel complesso o per regolare la pressione se necessario. A seconda se la pressione è inferiore a 100 o superiore a 300, l'eccezione intraprenderà un'azione diversa; la pressione è un argomento che l'utente deve fornire. Una volta attivata, verrà visualizzato un popup personalizzato con 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 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")

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 eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Per iniziare, dirigiti 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, le quali 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 in ogni serbatoio è adeguata. Se la pressione è inferiore a 100 o superiore a 300, genera l'eccezione personalizzata PressureError e passa la pressione come argomento. Se attivata, l'eccezione mostrerà il codice di errore e applicherà una correzione; altrimenti, verrà eseguita la clausola else che conferma 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: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )

Fai questo su tutti i segni X luminosi, utilizzando le costanti variabili che corrispondono ai tappeti colorati e verifica o regola le valvole della pressione secondo necessità.

Una volta fatto, dirigiti verso il segno X dorato e usa la funzione open() per accedere al magazzino contenente lo scaldabagno. Una volta dentro, dirigiti verso il segno X dorato presente all'interno del magazzino e utilizza la funzione read() per leggere il promemoria sul bancone. Questo promemoria ti fornirà informazioni su quale sia la temperatura ideale per ciascuno degli scaldabagni.

Una volta ottenute le informazioni su ciascuna delle temperature, recati verso il segno X scuro sul tappeto viola; qui utilizzeremo la sequenza di codice try/except e else per verificare che gli scaldabagni siano alla temperatura corretta. Ci sono altre quattro 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, verrà sollevata l'eccezione TemperatureError. Poiché si tratta di un'eccezione personalizzata, essa richiede un argomento: in questo caso, devi inserire la temperatura letta nel promemoria per eseguire correttamente la contromisura e correggere l'errore. Per esempio:

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

Fai questo per tutti gli scaldabagni: su ogni segno X, mentre sei di fronte agli scaldabagni, esegui la sequenza utilizzando le costanti variabili corrispondenti ai tappeti colorati appropriati per completare il livello.

Libro del Codice