Курс 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   |   Обробіть і продовжте