15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

finally:

logger.setLevel(old_level)

A expressão yield é o ponto no qual o conteúdo do bloco with será executado.

Qualquer exceção que apareça no bloco with será levantada novamente pela

expressão yield para que seja possível capturá-las na função auxiliar (consulte o

Item 40: “Considere usar corrotinas para rodar muitas funções simultaneamente”

para uma explicação sobre como isso funciona).

Agora, podemos chamar novamente a mesma função de log, mas no contexto

debug_logging. Desta vez, todas as mensagens de depuração são mostradas na

tela durante a execução do bloco de with. A mesma função rodando fora do

bloco with não mostraria nenhuma das mensagens de depuração.

with debug_logging(logging.DEBUG):

print('Inside:')

my_function()

print('After:')

my_function()

>>>

Inside:

Some debug data

Error log here

More debug data

After:

Error log here

Usando os alvos do with

O gerenciador de contextos passado para o comando with também pode retornar

um objeto. Esse objeto é atribuído a uma variável local no item as do comando

composto. Com isso, o código sendo executado no bloco with ganha o poder de

interagir diretamente com seu contexto.

Por exemplo, digamos que se queira escrever em um arquivo e garantir que ele

sempre seja fechado corretamente. Podemos fazer isso passando a função open

para o comando with. open devolve um manipulador de arquivo (handle) para o

alvo as, que é parte do with, e fecha o manipulador quando o código dentro do

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!