Python · Intermediário · Inglês · Técnico
contextmanager
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