Чем отличается использование контекстного менеджера от блока try/finally при обработке ресурсов в Python?

Блок try/finally тоже позволяет освободить ресурсы, но требует явного вызова методов освобождения в finally, что увеличивает вероятность ошибки или пропуска.

Короткий ответ

Что ответить на собеседовании

Контекстный менеджер в Python (используемый через конструкцию with) автоматически управляет ресурсами: он гарантирует, что методы enter и exit будут вызваны, что позволяет корректно открыть и закрыть ресурс даже при возникновении исключений.

Подробный разбор

Ответ с пояснениями

Контекстный менеджер в Python (используемый через конструкцию with) автоматически управляет ресурсами: он гарантирует, что методы enter и exit будут вызваны, что позволяет корректно открыть и закрыть ресурс даже при возникновении исключений.

Блок try/finally тоже позволяет освободить ресурсы, но требует явного вызова методов освобождения в finally, что увеличивает вероятность ошибки или пропуска.

Пример с контекстным менеджером:

with open('file.txt', 'r') as f:
    data = f.read()

Эквивалент с try/finally:

f = open('file.txt', 'r')
try:
    data = f.read()
finally:
    f.close()

Контекстный менеджер делает код чище, безопаснее и удобнее для работы с ресурсами.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее