Menu
CoddyTech

Qu’est-ce que la gestion des erreurs ?

Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 66 sur 78.

Un programme peut s’arrêter en cours d’exécution à cause d’une erreur. Ce code demande l’emplacement 5 d’un tableau qui ne contient que trois éléments :

var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")

Godot signale Out of bounds get index '5' et la fonction s’arrête à cette ligne, donc Done ne s’affiche jamais. Il s’agit d’une erreur d’exécution : le code est valide, mais une valeur obtenue pendant son exécution rend impossible l’exécution d’une ligne.

Les erreurs à l’exécution que tu rencontreras le plus souvent sont :

  • diviser un nombre entier par zéro, comme dans 10 / count lorsque count vaut 0 (la même chose s’applique à %)
  • lire une clé inexistante avec des crochets, comme dans player["mana"]
  • un indice en dehors du tableau, comme inventory[5] ci-dessus

Python et Java peuvent intercepter une erreur après qu’elle s’est produite, avec try et except ou catch. GDScript n’a pas d’exceptions ni de try. La gestion des erreurs en GDScript consiste à vérifier les valeurs avant la ligne qui pourrait échouer, et à décider quoi faire à la place :

if slot >= 0 and slot < inventory.size():
	print(inventory[slot])
else:
	print("Slot ", slot, " is empty")

La vérification nécessite les deux parties. Un indice négatif comme -1 n’est pas une erreur : il lit à partir de la fin du tableau, ce qui ne correspond pas à la signification d’un numéro d’emplacement.

Lorsque l’erreur se produit à l’intérieur d’une fonction que vous avez appelée, cette fonction s’arrête et renvoie une valeur vide, telle que 0 ou null, et l’appelant continue avec cette valeur incorrecte. Certaines erreurs donnent une valeur incorrecte sans aucune erreur : int("abc") vaut 0.

challenge icon

Défi

Facile

Le tableau inventory comporte quatre cases, numérotées à partir de 0. Le programme lit une ligne d’entrée : un numéro de case (un nombre entier, éventuellement négatif).

Si la case existe, affiche Slot , le numéro, : et l’élément. Pour l’entrée 2, la sortie est :

Slot 2: potion

Sinon, affiche Slot , le numéro et is empty. Pour l’entrée 7, la sortie est :

Slot 7 is empty

Un nombre négatif ne correspond jamais à une case : pour -1, affiche Slot -1 is empty. Le programme ne doit jamais s’arrêter avec une erreur.

Essayez vous-même

extends Node

func _ready():
	var inventory := ["sword", "shield", "potion", "bow"]
	var slot := int(OS.read_string_from_stdin())

	# Affiche l'objet dans l'emplacement, ou indique que l'emplacement est vide
	pass
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur GDScript en ligne