Выбор ответа Middle Исключения и контекстные менеджеры обновлено

Когда __exit__ подавляет исключение

Вопрос

Когда контекстный менеджер подавляет исключение, возникшее внутри with?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Если exit вернул истинное значение. exit(exctype, exc, tb) получает информацию об исключении.

Варианты ответа

  1. Если __exit__ не бросил своё исключение
  2. Если __enter__ вернул self
  3. Всегда, если у класса есть __exit__
  4. Если __exit__ вернул истинное значениеправильный ответ

Разбор

__exit__(exc_type, exc, tb) получает информацию об исключении. Вернул True (или любое истинное значение) значит «обработано», и исключение не выйдет из with. Вернул None или False, и оно летит дальше. Так устроен contextlib.suppress. От __enter__ это не зависит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.