else и with в python

Владимир Селюх

Developer

ELSE

else в случаях использования не с if это...

then

ВСЕ =)

Examples

WITH

PEP 0343

The "with" Statement

Что такое и что делает context manager?

  • Подготавливает ЧТО-ТО
  • Корректно завершает с ЭТИМ работу

Best Practice

  • Уменьшить количество повторяемого кода
  • Скрыть реализацию и дать простой интерфейс для написания клиентского кода

Общий Вид конструкции

* context_manager() может не возвращать никакого значения(None), точно так же это значение может ничему не присваиваться в клиентском коде
with context_manager() as returned_context_manager_value:
    do_client_code()

Context Manager может быть реализован как:

  • Класс
  • Генератор

CONTEXT MANAGER

Реализация классом

  1. Реализовать метод __enter__​

  2. Реализовать метод __exit__

Метод __exit__

  • Корректное завершение работы (завершение соединения, удаление объекта и т. д. )

  • __exit__ принимает от интерпритатора данные об ошибках произошедших в  клиентском коде через значения переменных - exception_type, exception_value и traceback

  • Можете обработать эти ошибки и вернуть True интерпретатору что означает что все ошибки обработаны или их не было

  • Можете не обработать эти ошибки и вернуть True интерпретатору что означает что все ошибки обработаны или их не было

Метод __enter__

  • Предварительная подготовка (установка соединения, создание объекта и т. д.)

  • Объект возвращаемый return может быть получен в пользовательском коде через as  

Examples

CONTEXT MANAGER

Реализация генератором

  1. Объявить функцию с декоратором

    @contextmanager
  2. Предварительная подготовка (установка соединения, создание объекта и т. д.)

  3. yield объект, какое-либо значение или ничего

  4. Объект возвращаемый yield может быть получен в пользовательском коде через as  

  5. Корректно завершить работу

  6. Опционально: обработать ошибки православным try/except

Examples

else и with

By Volodymyr Selyukh

else и with

  • 452