¿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 / countcuandocountes0(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.
Desafío
FácilEl 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: potionDe lo contrario, imprime Slot , el número y is empty. Para la entrada 7, la salida es:
Slot 7 is emptyUn 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
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
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionarios12Manejo básico de errores
¿Qué es el manejo de errores?Validación de entradasCláusulas de guardaDevolver códigos de errorRepaso: división seguraPractica por tu cuenta: Compilador de GDScript online