Курс языка программирования 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 упражнения. Прежде чем приступать к практике, изучите все темы раздела.