Menu
CoddyTech

¿Qué es el manejo de errores?

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 66 de 78.

Un programa puede detenerse a mitad de la ejecución debido a un error. Este código solicita la posición 5 de un arreglo que solo tiene tres elementos:

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

Godot informa Out of bounds get index '5' y la función se detiene en esa línea, por lo que nunca se imprime Done. Esto es un error en tiempo de ejecución: el código es válido, pero un valor que obtiene mientras se ejecuta hace que sea imposible ejecutar una línea.

Los errores de ejecución más frecuentes son:

  • dividir un número entero entre cero, como en 10 / count cuando count es 0 (lo mismo ocurre con %)
  • leer una clave inexistente con corchetes, como en player["mana"]
  • un índice fuera del arreglo, como inventory[5] más arriba

Python y Java pueden capturar un error después de que ocurra, con try y except o catch. GDScript no tiene excepciones ni try. Gestionar errores en GDScript significa comprobar los valores antes de la línea que podría fallar y decidir qué hacer en su lugar:

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

La verificación necesita ambas partes. Un índice negativo como -1 no es un error: lee desde el final del arreglo, lo cual no es lo que significa un número de posición.

Cuando el error ocurre dentro de una función que has llamado, esa función se detiene y devuelve un valor vacío, como 0 o null, y la función que la llamó continúa con ese valor incorrecto. Algunos errores dan un valor incorrecto sin ningún error: int("abc") es 0.

challenge icon

Desafío

Fácil

El arreglo inventory tiene cuatro posiciones, numeradas desde 0. El programa lee una línea de entrada: un número de posición (un número entero, posiblemente negativo).

Si la posición existe, imprime Slot , el número, : y el elemento. Para la entrada 2, la salida es:

Slot 2: potion

De lo contrario, imprime Slot , el número y is empty. Para la entrada 7, la salida es:

Slot 7 is empty

Un número negativo nunca es una posición: para -1, imprime Slot -1 is empty. El programa nunca debe detenerse con un error.

Pruébalo tú mismo

extends Node

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

	# Imprime el objeto en la ranura o indica que la ranura está vacía
	pass
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online