begin / rescue
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 44 de 56.
Para evitar que una excepción haga fallar tu programa, envuelve el código de riesgo en begin ... rescue ... end. Si algo dentro de begin lanza una excepción, Ruby salta al bloque rescue correspondiente en lugar de abortar.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# ¡No se puede dividir por cero!Puedes obtener el propio objeto de excepción con => e y leer su .message:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Bad input: invalid value for Integer(): "hello"Si no nombras una clase de excepción, rescue por sí solo captura StandardError y sus descendientes, la mayoría de los errores cotidianos. La captura resulta más útil cuando puedes hacer algo en el bloque rescue: sustituir un valor predeterminado, registrar el problema o volver a preguntarle al usuario.
Desafío
FácilLee dos líneas de la entrada, ambas deberían ser enteros, pero la segunda podría no ser un número válido.
Envuelve el procesamiento de la segunda línea en begin / rescue:
- Usa
Integer(input)(el cual lanzaArgumentErrorcon una cadena no válida) - Si el procesamiento tiene éxito, imprime
Sum: <a + b> - Si falla, imprime
Bad number!
Para la entrada 3 después 4, la salida es Sum: 7. Para 3 después abc, es Bad number!.
Pruébalo tú mismo
a = gets.to_i
raw_b = gets.chomp
# TODO: begin/rescue alrededor de Integer(raw_b); imprime la suma o el texto exacto de las instrucciones
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 en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datos3Matrices 2D
Fundamentos de matrices 2DAcceso a elementos 2DRecorrido de matrices 2DPatrones comunes en 2DRepaso - 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 raiseRepaso: calculadora seguraPractica por tu cuenta: Compilador de Ruby online