Курс по 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   |   Твърде голямо