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