Что такое исключение?
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 43 из 56.
Когда во время выполнения что-то идет не так — деление на ноль, парсинг "abc" как целого числа, вызов метода у nil: Ruby генерирует исключение. Программа останавливается, и Ruby выводит информацию о том, что произошло и где это случилось.
10 / 0
# ZeroDivisionError: деление на 0Каждый вид ошибки представляет собой отдельный класс. Несколько распространенных:
ZeroDivisionError: деление целого числа на нольArgumentError: методу переданы неверные аргументы (Integer("abc"))
NoMethodError: вызов метода, которого нет у получателя (nil.upcase)TypeError: операция над объектом неподходящего типа ("a" + 1)
У каждого класса исключения есть .message: понятное человеку описание, которое Ruby выводит, когда исключение не обработано. В следующих уроках показано, как перехватывать эти исключения, чтобы ваша программа продолжала работать.
Задание
НовичокПрочитайте одну строку ввода — название выражения Ruby. Выведите имя класса исключения, которое Ruby сгенерировал бы для него. Используйте оператор case (реальное возбуждение исключения не требуется):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- все остальное →
Unknown
Для ввода nil-method результатом будет NoMethodError.
Попробуйте сами
kind = gets.chomp
# TODO: case kind ... вывести соответствующее имя класса исключения
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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