Sobes.tech
Junior

Dê um exemplo de uso do gerenciador de contexto em Python.

sobes.tech IA

Resposta da IA

# Abertura do ficheiro:
# Utilizar o gestor de contexto garante o fecho automático do ficheiro,
# mesmo que ocorra uma exceção.
with open('my_file.txt', 'w') as f:
    # Escrever dados no ficheiro
    f.write('Hello, world!\n')
    f.write('Isto é um teste.')

# Exemplo de criação de um gestor de contexto próprio usando uma classe:
class ManagedResource:
    def __enter__(self):
        print('Recurso alocado')
        # Pode devolver um objeto que será atribuído à variável após 'as'
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('Recurso libertado')
        # Pode tratar exceções. Retornar True suprime a exceção.
        return False

# Uso do gestor de contexto criado:
with ManagedResource() as res:
    print('A trabalhar com o recurso')
    # res - é o objeto devolvido por __enter__

# Exemplo de criação de um gestor de contexto próprio usando o decorador contextmanager:
from contextlib import contextmanager

@contextmanager
def efficient_resource():
    print('Recurso eficiente alocado')
    try:
        yield 'Recurso eficiente' # Objeto que será devolvido
    finally:
        print('Recurso eficiente libertado')

# Uso do gestor de contexto com decorador:
with efficient_resource() as eff_res:
    print(f'Usamos: {eff_res}')