Владимир Селюх
Developer
The "with" Statement
Уменьшить количество повторяемого кода
Скрыть реализацию и дать простой интерфейс для написания клиентского кода
* context_manager() может не возвращать никакого значения(None), точно так же это значение может ничему не присваиваться в клиентском коде
with context_manager() as returned_context_manager_value:
do_client_code()Класс
Генератор
Реализовать метод __enter__
Реализовать метод __exit__
Корректное завершение работы (завершение соединения, удаление объекта и т. д. )
__exit__ принимает от интерпритатора данные об ошибках произошедших в клиентском коде через значения переменных - exception_type, exception_value и traceback
Можете обработать эти ошибки и вернуть True интерпретатору что означает что все ошибки обработаны или их не было
Можете не обработать эти ошибки и вернуть True интерпретатору что означает что все ошибки обработаны или их не было
Предварительная подготовка (установка соединения, создание объекта и т. д.)
Объект возвращаемый return может быть получен в пользовательском коде через as
Объявить функцию с декоратором
@contextmanager
Предварительная подготовка (установка соединения, создание объекта и т. д.)
yield объект, какое-либо значение или ничего
Объект возвращаемый yield может быть получен в пользовательском коде через as
Корректно завершить работу
Опционально: обработать ошибки православным try/except