Курс языка программирования 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

Комментарии

  1. Когда die бросает исключение, остаток блока покидается — поэтому строка $timeout = 60 никогда не выполняется и $timeout сохраняет значение по умолчанию 30.

  2. CATCH обрабатывает исключение (напечатав предупреждение), поэтому программа не останавливается. Она продолжает работу со значением по умолчанию — а это ровно и означает восстановиться после ошибки: отметить проблему, откатиться к чему-то безопасному и продолжить.

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

Сообщите и восстановитесь   |   Тест — CATCH