Menu
Coddy logo textTech

begin / rescue

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 44 из 56.

Чтобы исключение не привело к аварийному завершению вашей программы, оберните рискованный код в begin ... rescue ... end. Если что-либо внутри begin вызывает ошибку, Ruby переходит к соответствующему блоку rescue вместо прекращения работы.

begin
  result = 10 / 0
  puts result
rescue ZeroDivisionError
  puts "Cannot divide by zero!"
end
# Нельзя делить на ноль!

Вы можете получить сам объект исключения с помощью => e и прочитать его .message:

begin
  Integer("hello")
rescue ArgumentError => e
  puts "Bad input: #{e.message}"
end
# Неверный ввод: недопустимое значение для Integer(): "hello"

Если вы не укажете класс исключения, rescue сам по себе перехватывает StandardError и его наследников — большинство обычных сбоев. Перехват наиболее полезен, когда вы можете что-то сделать в блоке rescue: подставить значение по умолчанию, записать проблему в журнал, спросить пользователя снова.

challenge icon

Задание

Легко

Прочитайте две строки из ввода, обе должны быть целыми числами, но вторая может быть некорректным числом.

Оберните синтаксический разбор второй строки в begin / rescue:

  • Используйте Integer(input) (который вызывает ArgumentError при некорректной строке)
  • Если разбор прошёл успешно, выведите Sum: <a + b>
  • Если произошла ошибка, выведите Bad number!

Для ввода 3, затем 4 вывод будет Sum: 7. Для 3, затем abcBad number!.

Попробуйте сами

a = gets.to_i
raw_b = gets.chomp

# TODO: begin/rescue вокруг Integer(raw_b); вывести сумму или точный текст из инструкций
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby