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