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.

bloco with finaliza a execução.

with open('/tmp/my_output.txt', 'w') as handle:

handle.write('This is some data!')

Essa técnica é muito melhor que abrir e fechar manualmente o manipulador de

arquivo toda vez. Assim, temos a segurança de que o arquivo será fechado

quando a execução do programa sair de dentro do bloco with. A técnica também

encoraja o programador a reduzir a quantidade de código a ser executado

enquanto o manipulador mantém o arquivo aberto, o que é sempre uma boa

prática a seguir.

Para que suas próprias funções possam fornecer valores para alvos as, é

necessário produzir um valor (com yield) a partir do gerenciador de contexto. No

exemplo a seguir, definimos um gerenciador de contexto que busca uma

instância de Logger, configura seu nível e o entrega (com yield) ao alvo de as.

@contextmanager

def log_level(level, name):

logger = logging.getLogger(name)

old_level = logger.getEffectiveLevel()

logger.setLevel(level)

try:

yield logger

finally:

logger.setLevel(old_level)

Chamar métodos de log, como o debug do exemplo, no alvo de as produzirá

alguma saída porque o nível de segurança de log está ajustado como baixo no

bloco with. Usar diretamente o módulo logging não mostraria nenhuma

mensagem porque o nível default de severidade de log para o programa principal

é WARNING.

with log_level(logging.DEBUG, 'my-log') as logger:

logger.debug('This is my message!')

logging.debug('This will not print')

>>>

This is my message!

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!