Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения

Собственные исключения

Кроме встроенных исключений X::, вы можете определять собственные. Собственное исключение — это класс, который наследует от встроенного класса Exception и предоставляет метод message:

class TooBig is Exception {
    has $.value;

    method message {
        "Value $.value is too big";
    }
}

TooBig — обычный класс: у него могут быть атрибуты, например value. Но поскольку он is Exception, его можно бросить. Бросают его, создав объект и вызвав у него .throw:

my $value = 20 * 30;

TooBig.new(value => $value).throw if $value > 50;

CATCH {
    when TooBig {
        say .message;
    }
}

Программа печатает:

Value 600 is too big

Внутри CATCH срабатывает when TooBig, потому что брошенный объект имеет этот тип. Собственное исключение несёт те данные, которые вы ему дали (здесь — value), поэтому обработчик может построить точное сообщение или отреагировать особым образом. Это куда полезнее, чем простая строка, переданная в die.

Здесь сходится всё содержание этой части: собственное исключение — это класс (с атрибутами и методом), участвующий в механике исключений и готовый сообщить в точности о том, что пошло не так.

Практика

Пройдите 1 тест по содержанию этой темы.

Упражнения

В этом разделе 3 упражнения. Прежде чем приступать к практике, изучите все темы раздела.

  1. Слишком большое
  2. Ошибка отрицательного числа
  3. Два типа исключений

Навигация по курсу

Тест — fail   |   Слишком большое