Выбор ответа Senior Исключения и контекстные менеджеры обновлено
ExceptionGroup и except*
Вопрос
Что делает except* ValueError при перехвате ExceptionGroup("g", [ValueError(), TypeError()])?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Обрабатывает подгруппу ValueError, TypeError летит дальше. except (3.11+) разбивает группу: в ветку попадает ExceptionGroup только с подходящими исключениями, остальные проверяются следующими ветками except, а необработанные перебрасываются наружу группой.
Варианты ответа
- Ловит всю группу целиком, потому что в ней есть
ValueError - Не срабатывает:
except*работает только с одиночными исключениями - Обрабатывает подгруппу
ValueError,TypeErrorлетит дальшеправильный ответ - Ловит
ValueErrorи молча подавляетTypeErrorиз группы
Разбор
except* (3.11+) разбивает группу: в ветку попадает ExceptionGroup только с подходящими исключениями, остальные проверяются следующими ветками except*, а необработанные перебрасываются наружу группой. Обычный except ValueError группу бы не поймал, ведь её тип ExceptionGroup. Ничего не подавляется молча.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.