Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Объекты исключений / Exercises / Назовите ошибку
Решение: Назовите ошибку
Вот один из возможных вариантов решения задачи.
Код
sub risky {
die 'sub failed';
}
{
risky();
CATCH {
default {
say .^name;
say .message;
}
}
}🦋 Исходный код можно найти в файле name-the-error.raku.
Вывод
X::AdHoc
sub failedКомментарии
dieпроисходит внутриrisky, но исключение поднимается к вызывающей стороне. Его обрабатываетCATCHв том блоке, который вызвалrisky, — так обработка ошибок обычно и устроена: сбой и его обработчик не обязаны находиться в одной и той же процедуре.Обычный
dieсо строкой создаёт исключениеX::AdHoc, о чём и сообщает.^name, а.messageвозвращает текст, переданный вdie.