Развёрнутое пояснение:
1. При входе в блок with вызывается метод __enter__, который печатает begin.
2. Тело блока печатает write, после чего возбуждает исключение ValueError.
3. Перед выходом из блока Python вызывает __exit__ и передаёт ему тип, значение и трассировку исключения.
4. __exit__ печатает имя типа исключения — ValueError — и возвращает True.
5. Истинное возвращаемое значение сообщает Python, что исключение обработано, поэтому строка после блока выполняется и печатает continued. Итоговый вывод: begin, write, ValueError и continued на отдельных строках.
Почему это важно
Задача проверяет протокол менеджеров контекста. На практике __exit__ часто освобождает соединения, завершает транзакции и управляет распространением ошибок; случайное возвращение истинного значения может скрыть сбой и позволить программе продолжить работу с некорректным состоянием.
Post #4889
159
Python: задачки и вопросы
- ✍ 1