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: подставить значение по умолчанию, записать проблему в журнал, спросить пользователя снова.
Задание
ЛегкоПрочитайте две строки из ввода, обе должны быть целыми числами, но вторая может быть некорректным числом.
Оберните синтаксический разбор второй строки в begin / rescue:
- Используйте
Integer(input)(который вызываетArgumentErrorпри некорректной строке) - Если разбор прошёл успешно, выведите
Sum: <a + b> - Если произошла ошибка, выведите
Bad number!
Для ввода 3, затем 4 вывод будет Sum: 7. Для 3, затем abc — Bad number!.
Попробуйте сами
a = gets.to_i
raw_b = gets.chomp
# TODO: begin/rescue вокруг Integer(raw_b); вывести сумму или точный текст из инструкций
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки: подробный разбор
Обзор методов строкИнтерполяция строкПеребор строкРазделение и объединениеПовторение — String Weaver4Блоки, Proc и Lambda
Что такое блок?do..end и фигурные скобкиКлючевое слово yieldПараметры блокаProc и LambdaПовторение — пользовательский итератор7Хэши, часть 2
Hash.new со значениями по умолчаниюПеребор хэшейВложенные хэшиОбъединение и преобразованиеПовторение — счётчик частот10Проект — Учёт студентов
Обзор проектаДобавление студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика с диапазонами5Мощь Enumerable
Select и RejectЦепочка вызовов mapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byПовторение — конвейер данных3Двумерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваПеребор двумерных массивовРаспространённые шаблоны для двумерных массивовПовторение — операции с матрицами6Проект — Менеджер библиотеки
Обзор проектаДобавление книги9Обработка ошибок
Что такое исключение?begin / rescueНесколько клауз rescueensure и raiseПовторение — безопасный калькуляторПотренируйтесь самостоятельно: Онлайн-компилятор Ruby