Tratamiento de excepciones en Ruby

Declaración y captura de excepciones en Ruby

En muchos lenguajes de programación existen excepciones. Las excepciones sirven para controlar varios tipos de errores que pueden suceder durante la execución de un programa. Cuando ocurre el error, con las excepciones se puede capturar para tratarlo en vez de terminar el programa por completo.

En Ruby on Rails, el tratamiento de excepciones se encapsula entre cláusulas begin y end de la siguiente forma:

begin # codigo...
  rescue TIPO_EXCEPCION_1
  STDERR.puts "Ha ocurrido un problema de tipo 1"
  rescue TIPO_EXCEPCION_2
  STDERR.puts "Ha ocurrido un problema de tipo 2"
  else
  STDERR.puts "Ha ocurrido otro problema"
  ensure # se ejecuta siempre haya o no excepción
end

Tipos de excepciones

A continuación mostramos los tipos de excepciones de Ruby:

  • Exception
    • fatal
    • NoMemoryError
    • ScriptError
      • LoadError
      • NotImplementedError
      • SyntaxError
    • SignalException
      • Interrupt
    • StandardError
      • ArgumentError
      • IOError
        • EOFError
      • IndexError
      • LocalJumpError
      • NameError
        • NoMethodError
      • RangeError
        • FloatDomainError
      • RegexpError
      • RuntimeError
      • SecurityError
      • SystemCallError
        • Errorno::__ (ENOENT, etc.) (system-dependent)
      • ThreadError
      • TypeError
      • ZeroDivisionError
    • SystemExit
    • SystemStackError

Alzar excepciones

Podemos lanzar excepciones propias usando la palabra raise:

def metodo_que_lanza_excepcion
  raise "error 1"
end

metodo_que_lanza_excepcion rescue puts $!

El código anterior definimos un método y luego fuera de este método definimos qué pasará cuando se lanze la excepción. En este ejemplo imprimimos con el comando puts el mensaje que se passa por parámetro: "error 1"