Выбор ответа Middle Исключения и контекстные менеджеры обновлено
Когда __exit__ подавляет исключение
Вопрос
Когда контекстный менеджер подавляет исключение, возникшее внутри with?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Если exit вернул истинное значение. exit(exctype, exc, tb) получает информацию об исключении.
Варианты ответа
- Если
__exit__не бросил своё исключение - Если
__enter__вернулself - Всегда, если у класса есть
__exit__ - Если
__exit__вернул истинное значениеправильный ответ
Разбор
__exit__(exc_type, exc, tb) получает информацию об исключении. Вернул True (или любое истинное значение) значит «обработано», и исключение не выйдет из with. Вернул None или False, и оно летит дальше. Так устроен contextlib.suppress. От __enter__ это не зависит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.