Курс Raku / Об’єкти,
введення-виведення та винятки / Винятки / Фазер
CATCH / Вправи /
Повідомте і
відновіться
Розв’язання: Повідомте і відновіться
Ось один із можливих варіантів розв’язання задачі.
Код
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обробляє виняток (виводячи попередження), тож програма не зупиняється. Вона продовжує з типовим значенням, а це саме те, що означає відновитися після помилки: відзначити негаразд, вдатися до чогось безпечного й рушити далі.