Coding for KidsCoding for Kids
Livelli CreativiSfideGuida per Insegnanti
Vota per le funzionalità
Corso Avanzato di Sviluppo Python
Capitolo
>
Livello

Gestione delle eccezioni
Ricapitolando un'eccezione

Obiettivo

Vai all'ufficio e assicurati che l'offerta di denaro sia correttamente bilanciata utilizzando il blocco di codice finally e la parola chiave assert.

Nel profondo del secondo piano un ufficio è dedicato a conservare i fondi per investimenti futuri per la fattoria. È giunto il momento di fare un controllo e assicurarsi che tutti i conti siano in equilibrio. Quando si lavora con i numeri, errori matematici e altri problemi sono inevitabili, quindi ancora una volta la gestione delle eccezioni è una buona idea per catturare e risolvere gli errori.

Oltre ai blocchi di codice try / except e else, esiste anche il blocco di codice finally che consente di completare un'eccezione. Inoltre, la parola chiave assert è una funzione di debug che permette di verificare se un codice contiene errori, consentendoti di correggere il codice difettoso.

Inizia camminando verso il segno X luminoso davanti alla porta dell'ufficio e utilizzando la funzione open() per aprire la porta e entrare. Una volta dentro, dirigiti verso il segno X dorato e utilizza la funzione collect() per raccogliere due costanti differenti chiamate: categories e savings. La costante categories è una lista che contiene l'offerta monetaria delle tre categorie, chiamate: "exports", "imports", "stock", che devono essere verificate. La costante savings è una variabile che contiene l'offerta monetaria necessaria per garantire che le casse siano adeguatamente rifornite.

Ora che tutti gli elementi necessari sono stati raccolti, è il momento di bilanciare l'offerta monetaria conservata nelle sacche che saranno raccolte e distribuite da un impiegato subito dopo che avrai finito. Cammina verso il segno X scuro sul tappeto blu, per i segni X sui tappeti blu, giallo e rosso. Qui utilizzeremo la costante lista categories per verificare che ogni sacca contenga tutti i componenti necessari prima di essere spedita.

Ogni sacca dovrebbe contenere i componenti presenti nella lista categories. Ci sono tre costanti dizionario che corrispondono a ciascuna sacca: blue_sack, yellow_sack e red_sack. Esegui un ciclo for mentre sei in piedi sul segno X sul tappeto blu per verificare che la sacca contenga tutti i materiali richiesti, quindi conferma che l'offerta sia contabilizzata.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Alcune sacche dovrebbero contenere tutti i materiali richiesti, ma come di consueto in questi esercizi, potresti incorrere in un errore. Se incontri un problema devi usare i blocchi di codice try / except per catturare l'errore, in questo caso un KeyError: che si verifica se una chiave nel dizionario non viene trovata. Quando ciò accade, aggiungiamo anche finally all'eccezione, che conclude l'eccezione eseguendo sempre un codice alla fine della gestione dell'errore. A differenza delle eccezioni, può esserci un solo blocco finally per try. Per esempio, nel caso di blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Ripeti questo processo sui segni X scuri sui tappeti giallo e rosso, utilizzando le costanti dizionario yellow_sack e red_sack. Potrebbe non essere necessario in alcuni casi, poiché l'errore si verifica solo se manca un elemento nelle sacche.

Ora che le sacche sono state verificate, è il momento di passare ai forzieri di fronte ai tappeti: verde, viola e arancione. Qui dobbiamo assicurarci che l'offerta monetaria sia esattamente 30 in ogni forziere e che vengano chiusi successivamente. Ci sono tre costanti variabili corrispondenti a ciascun forziere, chiamate: green_chest, purple_chest e orange_chest.

Il problema principale nel verificare i forzieri è che non conosciamo il loro contenuto esatto; quando si ha a che fare con valori sconosciuti, è possibile utilizzare la parola chiave assert. Questa parola chiave permette di verificare se un'affermazione che stai dichiarando è vera o falsa, ed è molto utile per controllare se il tuo codice presenta errori. La parola chiave assert viene usata in combinazione con: try, except, else e final e le loro varie combinazioni per correggere il codice con errori. Per esempio, nel caso di green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

Nel codice sopra verifichiamo se il green_chest contiene la giusta quantità di offerta monetaria utilizzando la parola chiave assert. Se non contiene la quantità corretta, viene attivato il blocco except e calcoliamo quindi la fornitura mancante dalla variabile savings e la aggiungiamo al forziere. Se l'offerta è completa, viene attivato il blocco else e si conferma che tutti i beni sono contabilizzati. Una volta verificato tutto, viene eseguito il blocco finally e viene invocata la funzione close() per chiudere il forziere.

Sui segni X sui tappeti verde, viola e arancione, rivolgi lo sguardo verso i forzieri ed esegui la verifica utilizzando: green_chest, purple_chest, orange_chest sui rispettivi tappeti colorati. Una volta completato, cammina verso il segno X luminoso e usa la funzione place() per riporre il resto della variabile savings nella cassa per completare il livello.

Libro del Codice