Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Фазер
CATCH / Exercises
/ Сообщите и
восстановитесь
Решение: Сообщите и восстановитесь
Вот один из возможных вариантов решения задачи.
Код
my $timeout = 30;
{
die 'config missing';
$timeout = 60;
CATCH {
default {
say "warning: {.message}; keeping default";
}
}
}
say "timeout is $timeout seconds";🦋 Исходный код можно найти в файле report-and-recover.raku.
Вывод
warning: config missing; keeping default
timeout is 30 secondsКомментарии
Когда
dieбросает исключение, остаток блока покидается — поэтому строка$timeout = 60никогда не выполняется и$timeoutсохраняет значение по умолчанию30.CATCHобрабатывает исключение (напечатав предупреждение), поэтому программа не останавливается. Она продолжает работу со значением по умолчанию — а это ровно и означает восстановиться после ошибки: отметить проблему, откатиться к чему-то безопасному и продолжить.