Ruby:
Обработка ошибок

Как:

Ruby использует begin, rescue, ensure и end для обработки ошибок. Вы оборачиваете рискованный код в begin и end. Если происходит ошибка, в дело вступает rescue.

begin
  # Сюда идет рискованный код.
  puts 10 / 0
rescue ZeroDivisionError => e
  puts "Ой! Этого делать нельзя: #{e.message}"
ensure
  puts "Это всегда выполняется, была ошибка или нет."
end

Пример вывода:

Ой! Этого делать нельзя: деление на 0
Это всегда выполняется, была ошибка или нет.

Погружение

Исторически, обработка ошибок в языках программирования значительно эволюционировала, при этом у ранних языков часто были грубые или несуществующие механизмы. Обработка исключений в Ruby вдохновлена языками вроде Python и Smalltalk.

Альтернативы begin-rescue в Ruby включают использование rescue в определениях методов или применение throw и catch для нестандартного управления потоком, хотя они не используются для типичной обработки ошибок.

Одна интересная деталь: исключения Ruby являются объектами (экземплярами класса Exception и его потомков), так что вы можете определять собственные классы ошибок и делать больше, чем просто регистрировать ошибки — вы можете переносить богатое состояние по программе для более надежной обработки ошибок.

См. также

  • Документация Ruby по исключениям и обработке ошибок: ruby-doc.org
  • Подробное руководство по лучшим практикам обработки ошибок в Ruby: thoughtbot.com