ExpertiDict

Python · Avançado · Inglês · Técnico

ExitStack

/ˈɛɡzɪt stæk/substantivo

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 fechados

Exemplos

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.

Veja também

Todos os termos de Python