Курс по Raku / Обекти, вход-изход и изключения / Изключения / Прихващане на изключения с try

Не всяка грешка е незабавна

По подразбиране хвърленото изключение спира програмата веднага, а try е начинът да го прихванете. Но не всичко, което изглежда като фатална грешка, всъщност спира програмата ви в мига, в който се случи. Raku има провали, които мълчат — отлагат реакцията си, докато не използвате резултата, или ви позволяват да ги разгледате и да продължите. Няколко такива вече се появиха в тази част и си струва да бъдат събрани на едно място.

Деление на нула. Делението на нула не гърми там, където е написано. Лошата стойност се произвежда и се държи мълчаливо; тя хвърля изключение едва когато я използвате — например като я отпечатате или преобразувате:

my $x = 1 / 0;    # тук няма грешка
say 'still running';
say $x;           # чак сега хвърля

Това отложено поведение и обектите Failure, които стоят зад него, са тема на Меки провали.

Провалила се външна програма. Proc, върнат от run или shell, който е завършил неуспешно, не хвърля изключение, когато бъде произведен. Той хвърля само ако го изхвърлите необработен; съхранете го и прочетете .exitcode (или го проверете като булева стойност) и провалът си остава обикновена стойност, на която можете да реагирате. Видяхте това в Обектът Proc.

Общото между тях: провалът може да бъде отложен — превърнат в стойност, която разглеждате, когато сте готови, вместо в незабавен срив. try и фазерът CATCH се занимават с грешките, които се хвърлят веднага; тези механизми се занимават с онези, които не се хвърлят.

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

Прихващане на изключения с try   |   Прихванете грешката


💪 Или преминете направо към упражненията в този раздел.