Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения

Фазер CATCH

Блок try удобен, но он рассматривает весь блок как одно целое: либо всё получилось, либо нет. Фазер CATCH даёт более тонкий контроль — он позволяет обработать исключение внутри того блока, где оно произошло, и решить, что делать дальше.

CATCH — это фазер, как и те, с которыми вы встречались в разделе о порядке выполнения. Его пишут где угодно внутри блока; он срабатывает только тогда, когда там бросается исключение. Само исключение доступно как тема $_:

{
    die 'Boom!';

    CATCH {
        default {
            say 'Caught: ' ~ .message;
        }
    }
}

say 'after';

Программа печатает:

Caught: Boom!
after

Блок default внутри CATCH обрабатывает любое исключение. После того как он отработал, исключение считается обработанным, поэтому программа не останавливается: выполнение продолжается за объемлющим блоком — вот почему печатается after.

Без CATCH вызов die завершил бы программу раньше, чем дело дошло бы до after.

Практика

Пройдите 1 тест по содержанию этой темы.

Упражнения

В этом разделе 3 упражнения. Прежде чем приступать к практике, изучите все темы раздела.

  1. Обработайте и продолжите
  2. Переживите цикл
  3. Сообщите и восстановитесь

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

Тест — try   |   Обработайте и продолжите