← Python na prática
04 / 10 · 23 MIN

Erros e ficheiros com contexto

Trata falhas esperadas e mantém os recursos sob controlo.

Tratar a falha certa

Captura exceções específicas quando tens uma recuperação definida. Um except demasiado abrangente pode esconder erros de programação e fazer parecer que o processo terminou bem. Acrescenta contexto útil à mensagem sem registar palavras-passe, tokens ou dados sensíveis.

Libertar recursos

Usa with ao abrir ficheiros para garantir o fecho do recurso, mesmo quando ocorre uma exceção no bloco. Define a codificação de texto. Para operações externas, considera limites de tempo, tentativas limitadas e o risco de repetir efeitos já executados.

Aplicação guiada no trabalho

Distingue uma entrada opcional de uma obrigatória antes de escolher a recuperação. Se o ficheiro obrigatório faltar, devolver texto vazio pode transformar falha de entrega num relatório falso de zero movimentos. Regista contexto e comunica falha. O bloco with assegura o fecho de um ficheiro aberto, mas não reverte escritas já feitas nem valida o conteúdo. Para publicar só relatórios completos, prepara um temporário, valida e só depois substitui o destino nas condições suportadas pelo sistema. Em POSIX, os.replace bem-sucedido é atómico, e usar o mesmo filesystem evita a limitação de movimento entre filesystems. Durabilidade após falha de energia requer análise adicional. Não uses except Exception: pass como política de sucesso; identifica quais falhas consegues recuperar e propaga as restantes.

Limpeza sem esconder o erro

Um finally é executado durante a saída do bloco, mas um return dentro dele pode substituir o retorno ou suprimir a exceção que devia chegar ao chamador. Um importador pode assim receber [] e marcar sucesso apesar de uma leitura falhada. Evita usar o retorno de limpeza como resultado do trabalho. Python 3.14 emite SyntaxWarning para este padrão; os exemplos locais em 3.13 demonstram a semântica, não a emissão desse aviso.

Classificar erros pelo âmbito da operação

Restringe o try às operações cuja falha o handler sabe interpretar. Se parsing e publicação podem ambos levantar ValueError, um handler que chama tudo entrada inválida esconde erros da publicação. Um else permite separar o caminho após parsing bem-sucedido, com tratamento próprio quando necessário. KeyboardInterrupt herda de BaseException fora de Exception: a interrupção exige uma política deliberada. finally pode limpar recursos durante uma falha ou interrupção, mas essa limpeza não comprova que o trabalho de negócio terminou.

from pathlib import Path

try:
    text = Path("required-report.txt").read_text(encoding="utf-8")
except FileNotFoundError as exc:
    raise SystemExit("Required input missing") from exc
NA PRÁTICA

Uma importação falha a meio. Antes de repetir, verifica quais os registos confirmados e se a operação é idempotente. Registar um erro e continuar silenciosamente pode produzir um relatório incompleto apresentado como válido.

Armadilhas comuns

Transformar ficheiro obrigatório ausente em vazio; confundir with com rollback; silenciar falhas.

Tópicos relacionados: Precisão, dados externos e tempo · Automação observável e repetível

Leva esta ideia contigo

Uma recuperação precisa de ser explícita. Fechar recursos e limitar repetições faz parte da correção.

Criar conta

Referência: Python 3.14: Errors and exceptions · Python 3.14; DR Python 2026.3

Python® é uma marca registada de Python Software Foundation. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Python Software Foundation. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.