Курс Raku / Об’єкти,
введення-виведення та винятки / Винятки / Перехоплення винятків за допомогою
try
Не кожна помилка виникає одразу
За замовчуванням кинутий виняток одразу зупиняє програму, а
try — це спосіб його перехопити. Але не все, що виглядає як
фатальна помилка, справді спиняє вашу програму тієї ж миті, коли
стається. У Raku є збої, які поводяться тихо, відкладаючи свою реакцію
до моменту, коли ви скористаєтеся результатом, або дозволяючи вам
дослідити їх і рушити далі. Кілька з них уже траплялися в цій частині, і
варто зібрати їх в одному місці.
Ділення на нуль. Ділення на нуль не вибухає там, де його записано. Погане значення створюється й тихо тримається; воно кидає виняток лише тоді, коли ви його використовуєте — наприклад, виводите чи зводите до іншого типу:
my $x = 1 / 0; # тут помилки немає
say 'still running';
say $x; # ось тепер вона кидаєтьсяЦя відкладена поведінка та об’єкти Failure, що за нею
стоять, є темою розділу М’які збої.
Зовнішня програма, що зазнала невдачі. Об’єкт
Proc, який повертають run чи
shell і який завершився невдало, не кидає винятку в мить
свого створення. Він кидає його лише тоді, коли ви відкидаєте
його необробленим; збережіть його й прочитайте .exitcode
(або перевірте як булеве значення) — і збій лишиться звичайним
значенням, на яке можна відреагувати. Ви бачили це в темі Об’єкт Proc.
Спільна нитка тут така: збій можна відкласти — перетворити
на значення, яке ви дослідите, коли будете готові, замість негайного
падіння. try та фазер CATCH мають справу з
помилками, які кидаються одразу; ці механізми — з тими, що ні.
Навігація курсом
← Перехоплення винятків за допомогою
try | Перехопіть помилку
→
💪 Або перейдіть одразу до
вправ цього розділу.