Menu
Coddy logo textTech

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 fallos cotidianos. Capturar es más útil cuando puedes hacer algo en el bloque rescue: sustituir un valor predeterminado, registrar el problema, volver a preguntar al usuario.

challenge icon

Desafío

Fácil

Lee 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 lanza ArgumentError con 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
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 Ruby online