Есть ли в Ruby обработка исключений?

Ruby поддерживает гибкую схему обработки исключений:

  begin
    код, который может вызвать исключения
  rescue [имя классов исключений]
    код, выполняемый в случае исключения
  rescue [имя классов исключений]
    код, выполняемый в случае исключения
  ensure
    код, который выполняется в люблм случае
  end

Если в секции begin происходит исключение, выполняется секция с соответствующим именем исключения. Секция ensure выполняется в любом случае. Секции rescue и ensure могут быть опущены.

Если в rescue не указан класс исключения, подразумевается исключение StandardError, и rescue выполняется для тех исключений, которые находятся в отношении is_a? по отношению к StandardError, то есть сам StandardError и его наследники.

Все выражение в целом возвращает значение секции begin. Самое последнее исключение хранится в глобальной переменной $! (и его тип определяется с помощью $!.type).