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 excUma 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
Uma recuperação precisa de ser explícita. Fechar recursos e limitar repetições faz parte da correção.
Referência: Python 3.14: Errors and exceptions · Python 3.14; DR Python 2026.3