Um context manager é qualquer objeto com dunder enter e dunder exit. O with chama enter, associa o valor de retorno ao alvo do as, e garante que exit rode depois mesmo se o corpo levantar erro. O exit recebe os detalhes da exceção e pode suprimi-la retornando True. O decorator contextlib.contextmanager deixa você escrever a mesma coisa como um generator com um único yield.
Por que os entrevistadores perguntam isso
Vazamento de recursos é uma das falhas de produção mais comuns em serviços Python, então os entrevistadores checam se você usa with por reflexo e se entende a garantia que ele dá. Eles também querem ver que você consegue escrever um, não só consumir, e que você sabe que o exit roda no caminho da exceção, que é o que faz dele um mecanismo de limpeza em vez de açúcar sintático.
Como estruturar sua resposta
- Cite os dois métodos dunder e a função de cada um.
- Reforce que o exit roda mesmo com exceções.
- Mencione o atalho de generator do contextlib.
- Descreva um que você escreveu e o vazamento que ele evitou.
Exemplo de resposta
O protocolo são dois métodos. O enter faz o setup e devolve o que você quiser ligado depois da palavra as, e o exit faz o teardown. A parte importante é que o exit roda tanto se o bloco terminou limpo quanto se explodiu, e ele recebe o tipo, o valor e o traceback da exceção para decidir o que fazer. Retornar True do exit engole a exceção, o que eu uso com parcimônia porque esconde falhas. A maior parte dos que eu escrevo usa contextlib.contextmanager, onde o código antes do yield é setup, o depois é teardown, e eu embrulho o yield num try finally para a limpeza acontecer mesmo com erro. Construí um numa fintech para transações de banco que também carimbava um request id no contexto de log, então toda query dentro do bloco era rastreável e o id era limpo na saída. Antes disso a gente setava e limpava na mão, e um return antecipado num handler vazou o id para o request seguinte no mesmo worker.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você lida com vários context managers de uma vez?
- O que o contextlib.ExitStack resolve?
- Como você escreveria um context manager async?
Mais perguntas para Desenvolvedor Python
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas