ExpertiDict

Python · Intermediário · Inglês · Técnico

contextmanager

/ˈkɑntɛkst ˈmænɪdʒəɹ/substantivo

Decorator do módulo contextlib que transforma um gerador de um único yield em gerenciador de contexto: o código antes do yield é a entrada e o depois é a saída.

Onde usar

Evita escrever uma classe com __enter__ e __exit__ em tarefas simples, como medir tempo, trocar de diretório ou abrir uma transação. Em code review, o yield deve ficar dentro de um try/finally.

Em código

from contextlib import contextmanager
@contextmanager
def aberto():
  print('abre')
  try: yield
  finally: print('fecha')
with aberto():
  print('dentro')

Exemplos

Use contextmanager instead of writing a whole class.

Use contextmanager em vez de escrever uma classe inteira.

Put the yield inside a try finally block.

Coloque o yield dentro de um bloco try finally.

Cuidado

Sem try/finally ao redor do yield, o código de limpeza não roda quando o bloco with lança uma exceção.

Sinônimos

decorator de contexto

Veja também

Todos os termos de Python