Menu
CoddyTech

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 / count quando count è 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.

challenge icon

Sfida

Facile

L’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: potion

Altrimenti, stampa Slot , il numero e is empty. Per l’input 7, l’output è:

Slot 7 is empty

Un 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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore GDScript online