Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Фазер
CATCH / Exercises
/ Обработайте и
продолжите
Решение: Обработайте и продолжите
Вот один из возможных вариантов решения задачи.
Код
for <ok bad ok> -> $item {
{
die 'boom' if $item eq 'bad';
say "processed $item";
CATCH {
default {
say "skipped ($item): {.message}";
}
}
}
}🦋 Исходный код можно найти в файле handle-and-continue.raku.
Вывод
processed ok
skipped (bad): boom
processed okКомментарии
Фазер
CATCHнаходится внутри блока, относящегося к одному элементу, поэтому он обрабатываетdieтолько для этого элемента. Раз исключение обработано там, оно не вырывается наружу и не останавливает весь цикл.В этом и состоит типичное преимущество
CATCHпередtry: сбой на одной итерации решается на месте, и цикл переходит к следующему элементу. Средний элемент даёт сбой, но дваokвсё равно обрабатываются.