Исключения


# Система исключений Ruby

begin
    # код под защитой
    raise
    raise "bad mp3 encoding"
    raise InterfaceException, "Keyboard failure", caller
    raise ArgumentError, "Name too big", caller[1..-1]
rescue RuntimeError => e
    # обрабатываем конкретный тип ошибок
    # напечатаем сообщение об ошибке
    puts e
rescue
    # можно писать rescue => e чтобы получить объект исключения
    # обрабатываем все исключения
else
    # сработает, если исключений не было
ensure
    # сработает в любом случае
end

* В caller помещается стек вызова.
* Конструкция caller[1..-1] удаляет 2 позиции из стека вызова
  при обработке исключения