¿Qué es una excepción?
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 43 de 56.
Cuando algo sale mal en tiempo de ejecución, al dividir por cero, analizar "abc" como un entero o llamar a un método en nil: Ruby lanza una excepción. El programa se detiene y Ruby imprime lo que sucedió junto con el lugar donde ocurrió.
10 / 0
# ZeroDivisionError: dividido por 0Cada tipo de fallo es su propia clase. Algunos comunes:
ZeroDivisionError: dividir un entero por ceroArgumentError: argumentos incorrectos pasados a un método (Integer("abc"))
NoMethodError: llamar a un método que el receptor no tiene (nil.upcase)TypeError: operación en el tipo de objeto incorrecto ("a" + 1)
Cada clase de excepción tiene un .message: la descripción legible por humanos que Ruby imprime cuando la excepción no se maneja. Las siguientes lecciones muestran cómo capturar estas excepciones para que tu programa siga ejecutándose.
Desafío
PrincipianteLee una sola línea de entrada, el nombre de una sola expresión de Ruby. Imprime el nombre de la clase de excepción que Ruby lanzaría para ella. Usa una sentencia case (no es necesario realizar un lanzamiento real):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- cualquier otra cosa →
Unknown
Para la entrada nil-method, la salida es NoMethodError.
Hoja de referencia
Cuando algo sale mal en tiempo de ejecución, Ruby lanza una excepción y el programa se detiene. Clases de excepción comunes:
ZeroDivisionError: dividir un entero por ceroArgumentError: argumentos incorrectos (p. ej.Integer("abc"))NoMethodError: llamar a un método que el receptor no tiene (p. ej.nil.upcase)TypeError: operación en el tipo de objeto incorrecto (p. ej."a" + 1)
10 / 0
# ZeroDivisionError: dividido por 0Cada objeto de excepción tiene un .message con una descripción legible por humanos.
Pruébalo tú mismo
kind = gets.chomp
# TODO: case kind ... imprimir el nombre de la clase de excepción coincidente
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline3Arreglos 2D
Conceptos básicos de arreglos 2DAcceso a elementos 2DIteración sobre arreglos 2DPatrones comunes en 2DResumen - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libro9Manejo de errores
¿Qué es una excepción?begin / rescueMúltiples cláusulas rescueensure y raiseResumen - Calculadora segura