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

Решение: Назовите ошибку

Вот один из возможных вариантов решения задачи.

Код

sub risky {
    die 'sub failed';
}

{
    risky();

    CATCH {
        default {
            say .^name;
            say .message;
        }
    }
}

🦋 Исходный код можно найти в файле name-the-error.raku.

Вывод

X::AdHoc
sub failed

Комментарии

  1. die происходит внутри risky, но исключение поднимается к вызывающей стороне. Его обрабатывает CATCH в том блоке, который вызвал risky, — так обработка ошибок обычно и устроена: сбой и его обработчик не обязаны находиться в одной и той же процедуре.

  2. Обычный die со строкой создаёт исключение X::AdHoc, о чём и сообщает .^name, а .message возвращает текст, переданный в die.

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

Назовите ошибку   |   Сопоставьте тип