Генераторы — один из самых полезных механизмов в Python. Они имеют…

Загружаем изображение…
Генераторы — один из самых полезных механизмов в Python. Они имеют множество применений, одно из которых — создание менеджеров контекста. Обычно нужно вручную определять магические методы __enter__ и __exit__, но декоратор @contextmanager из модуля contextlib делает это намного удобнее:

from contextlib import contextmanager

@contextmanager
def atomic():
print('BEGIN')

try:
yield
except Exception:
print('ROLLBACK')
else:
print('COMMIT')Теперь atomic — это менеджер контекста, который можно использовать следующим образом:


In : with atomic():
...: print('ERROR')
...: raise RuntimeError()
...:
BEGIN
ERROR
ROLLBACKКроме того, @contextmanager позволяет использовать его как декоратор, так и менеджер контекста.

In : @atomic()
...: def ok():
...: print('OK')
...:
In : ok()
...:
BEGIN
OK
COMMIT

👉@BookPython
Просмотры: 3 294
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти