Menu
Coddy logo textTech

Что такое исключение?

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

Когда во время выполнения что-то идет не так — деление на ноль, парсинг "abc" как целого числа, вызов метода у nil: Ruby генерирует исключение. Программа останавливается, и Ruby выводит информацию о том, что произошло и где это случилось.

10 / 0
# ZeroDivisionError: деление на 0

Каждый вид ошибки представляет собой отдельный класс. Несколько распространенных:

  • ZeroDivisionError: деление целого числа на ноль
  • ArgumentError: методу переданы неверные аргументы (Integer("abc"))
  • NoMethodError: вызов метода, которого нет у получателя (nil.upcase)
  • TypeError: операция над объектом неподходящего типа ("a" + 1)

У каждого класса исключения есть .message: понятное человеку описание, которое Ruby выводит, когда исключение не обработано. В следующих уроках показано, как перехватывать эти исключения, чтобы ваша программа продолжала работать.

challenge icon

Задание

Новичок

Прочитайте одну строку ввода — название выражения Ruby. Выведите имя класса исключения, которое Ruby сгенерировал бы для него. Используйте оператор case (реальное возбуждение исключения не требуется):

  • divide-by-zeroZeroDivisionError
  • nil-methodNoMethodError
  • bad-integerArgumentError
  • wrong-typeTypeError
  • все остальное → Unknown

Для ввода nil-method результатом будет NoMethodError.

Шпаргалка

Когда во время выполнения что-то идет не так, Ruby генерирует исключение, и программа останавливается. Распространенные классы исключений:

  • ZeroDivisionError: деление целого числа на ноль
  • ArgumentError: неверные аргументы (например, Integer("abc"))
  • NoMethodError: вызов метода, которого нет у получателя (например, nil.upcase)
  • TypeError: операция над объектом неподходящего типа (например, "a" + 1)
10 / 0
# ZeroDivisionError: деление на 0

У каждого объекта исключения есть метод .message с человекочитаемым описанием.

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

kind = gets.chomp

# TODO: case kind ... вывести соответствующее имя класса исключения
quiz iconПроверьте себя

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

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