O comando with (context manager) é a forma recomendada de lidar com recursos que precisam ser abertos e fechados (como arquivos, conexões de rede, etc.). Ele automaticamente garante que o recurso seja fechado, mesmo que uma exceção ocorra dentro do bloco with, evitando a necessidade de finally para essa tarefa específica.

# Sem 'with': risco de arquivo não ser fechado se houver erro
arquivo = open("dados.txt", "w")
try:
    arquivo.write("Algum dado")
    # Simula um erro que poderia impedir o arquivo.close()
    raise ValueError("Erro simulado!")
finally:
    arquivo.close() # Garante que fecha, mas é mais verboso

# Com 'with': mais limpo e seguro
try:
    with open("dados.txt", "w") as f:
        f.write("Algum dado")
        # Simula um erro, mas o 'with' fecha 'f' automaticamente
        raise ValueError("Erro simulado!")
except ValueError as e:
    print(f"Erro capturado: {e}. O arquivo foi fechado automaticamente pelo 'with'.")