Курс по 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обработва изключението (отпечатвайки предупреждение), така че програмата не спира. Тя продължава със стойността по подразбиране, а точно това означава възстановяване от грешка: отбележи проблема, върни се към нещо безопасно и продължи.