Курс Raku / Об’єкти, введення-виведення та винятки / Винятки

Перехоплення винятків за допомогою try

Коли в програмі на Raku щось іде не так — бракує файлу, стається явний die, — кидається виняток. За замовчуванням неперехоплений виняток зупиняє програму. Блок try дозволяє виконати код, який може зазнати невдачі, не обрушуючи програми.

Ви загортаєте ризикований код у блок try. Якщо всередині кинуто виняток, блок на цьому зупиняється, але програма триває далі:

my $result = try {
    die 'Boom!';
};

say "Still works";

die перехоплює try, тож програма не падає — вона одразу переходить до наступного оператора й виводить:

Still works

Коли блок зазнає невдачі отак, він обчислюється в невизначене значення, тож $result є невизначеним:

say $result.defined; # False

Перехоплений виняток зберігається в спеціальній змінній $!. Звідти можна прочитати його повідомлення:

say $!.message; # Boom!

Отже, try перетворює фатальну помилку на щось, що ваша програма може дослідити й на що може відреагувати. Якщо блок виконується без жодного винятку, $result містить його значення, а $! є невизначеною.

Ще в цьому розділі

Практика

Виконайте 1 тест за змістом цього розділу.

Вправи

У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.

  1. Перехопіть помилку
  2. Коли все йде добре
  3. Спроба або значення за замовчуванням

Навігація курсом

Винятки   |   Не кожна помилка виникає одразу