Что такое with?

with — ключевое слово, которое работает с менеджером контекста и автоматически управляет ресурсами:

  1.  вызывает магический метод __enter__() при входе и открывает ресурс.
  2.  выполняет блок кода.
  3.  вызывает магический  __exit__() при выходе, освобождая ресурс и обрабатывая исключения.