Встречается на 2% собеседований по Python

В чем разница между контекстным менеджером и try/finally в Python

Контекстный менеджер (используется с with) и try/finally оба обеспечивают выполнение завершающего кода, но контекстный менеджер делает это более элегантно и читаемо.

Ключевые отличия:

  1. Читаемость: with явно показывает границы работы с ресурсом.
  2. Инкапсуляция: Контекстный менеджер скрывает логику инициализации/очистки внутри класса (__enter__, __exit__).
  3. Обработка исключений: __exit__ получает информацию об исключении, позволяя его обработать или подавить.

Пример:

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

# with (контекстный менеджер)
with open('file.txt', 'r') as file:
    data = file.read()  # файл закроется автоматически

Контекстные менеджеры предпочтительнее для работы с ресурсами, требующими освобождения (файлы, соединения и т.д.). try/finally более универсален, но менее удобен для типовых сценариев.

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы