Che cos'è la gestione degli errori?
Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 66 di 78.
Un programma può interrompersi a metà a causa di un errore. Questo codice richiede lo slot 5 di un array che ha solo tre elementi:
var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")Godot segnala Out of bounds get index '5' e la funzione si interrompe a quella riga, quindi Done non viene mai stampato. Questo è un errore di runtime: il codice è valido, ma un valore ottenuto durante l'esecuzione rende impossibile eseguire una riga.
Gli errori di esecuzione che si verificano più spesso sono:
- dividere un numero intero per zero, come in
10 / countquandocountè0(lo stesso vale per%) - leggere una chiave mancante con le parentesi quadre, come in
player["mana"] - un indice al di fuori dell'array, come
inventory[5]qui sopra
Python e Java possono intercettare un errore dopo che si verifica, con try e except oppure catch. GDScript non ha eccezioni né try. Gestire gli errori in GDScript significa controllare i valori prima della riga che potrebbe fallire e decidere cosa fare invece:
if slot >= 0 and slot < inventory.size():
print(inventory[slot])
else:
print("Slot ", slot, " is empty")Il controllo richiede entrambe le parti. Un indice negativo come -1 non è un errore: legge dalla fine dell’array, cosa che non corrisponde al significato di un numero di slot.
Quando l'errore si verifica all'interno di una funzione che hai chiamato, quella funzione si interrompe e restituisce un valore vuoto, come 0 o null, e la funzione chiamante continua con quel valore errato. Alcuni errori producono un valore errato senza generare alcun errore: int("abc") restituisce 0.
Sfida
FacileL’array inventory ha quattro slot, numerati a partire da 0. Il programma legge una riga di input: un numero di slot (un numero intero, eventualmente negativo).
Se lo slot esiste, stampa Slot , il numero, : e l’elemento. Per l’input 2, l’output è:
Slot 2: potionAltrimenti, stampa Slot , il numero e is empty. Per l’input 7, l’output è:
Slot 7 is emptyUn numero negativo non è mai uno slot: per -1, stampa Slot -1 is empty. Il programma non deve mai terminare con un errore.
Provalo tu
extends Node
func _ready():
var inventory := ["sword", "shield", "potion", "bow"]
var slot := int(OS.read_string_from_stdin())
# Stampa l'oggetto nello slot oppure indica che lo slot è vuoto
pass
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionari12Gestione di base degli errori
Che cos'è la gestione degli errori?Convalida dell'inputClausole di guardiaRestituire codici di erroreRiepilogo - Divisione sicuraEsercitati da solo: Compilatore GDScript online