Теория
Оператор with появился в python 2.5, но, не смотря на это, используется до сих пор недостаточно широко. Являясь упрощенной версией анонимных блоков кода with позволяет:
- исполнить код до начала блока
- исполнить код по выходу из блока, независимо от того это выход по исключению с помощью return или другим способом
- обработать исключение, возникшее в блоке.