Python · Avançado · Inglês · Técnico
ExitStack
Classe do contextlib que empilha gerenciadores de contexto dinamicamente e os fecha na ordem inversa ao sair do with. Serve quando o número de recursos só é conhecido em execução.
Onde usar
Resolve casos como abrir uma lista de arquivos de tamanho variável ou ativar recursos condicionalmente. Em code review, substitui with aninhados e laços com try/finally manual.
Em código
from contextlib import ExitStack
n = 3 # quantidade só conhecida em runtime
with ExitStack() as pilha:
fs = [pilha.enter_context(open(__file__))
for _ in range(n)]
print(len(fs)) # 3
# aqui os 3 arquivos já foram fechadosExemplos
Use ExitStack when the number of files varies.
Use ExitStack quando o número de arquivos varia.
ExitStack closes everything in reverse order.
O ExitStack fecha tudo na ordem inversa.
Cuidado
Não use quando um único with, ou um with com vírgulas, já resolve; o ExitStack é para quando a quantidade é dinâmica.