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'.")