Como lidar com exceções em Python (Try-Except-Finally)
Aprenda como lidar com exceções em Python usando blocos try, exceto, else e finalmente. Escreva código Python livre de erros e resistente a falhas.
Visão geral
Um software robusto deve estar preparado para lidar com condições inesperadas, como arquivos ausentes, entradas de usuário inválidas, falhas de banco de dados ou interrupções de rede. Quando ocorre um erro em Python, ele gera uma exceção. Se não forem tratadas, as exceções interromperão seu programa imediatamente e imprimirão uma pilha de rastreamento.
A principal ferramenta do Python para gerenciar erros de tempo de execução é o bloco `try-except`. Você coloca o código que pode gerar um erro dentro do bloco `try` e define o código de tratamento de erros dentro de um ou mais blocos `except`. Especificar a classe de exceção exata (como `ValueError` ou `ZeroDivisionError`) é altamente recomendado, pois capturar todas as exceções genéricas (`exceto:`) pode mascarar bugs.
Para tornar seu fluxo de exceções mais expressivo, Python fornece dois blocos adicionais: `else` e `finally`. O bloco `else` é executado somente se nenhuma exceção for levantada no bloco `try`, o que é útil para código que só deve ser executado com sucesso. O bloco `finally` é executado *sempre*, independentemente de ter ocorrido uma exceção, tornando-o o local perfeito para limpezas como fechamento de arquivos ou conexões de banco de dados.
Saída de código e execução
Este script demonstra o tratamento robusto de erros em Python usando try, exceto, else e finalmente.
def divide_numbers(a, b):
try:
# Code that might raise an exception
result = a / b
except ZeroDivisionError:
# Handling a specific exception
print("Error: Cannot divide by zero!")
except TypeError:
# Handling another exception type
print("Error: Inputs must be numbers!")
else:
# Run only if try block succeeded
print(f"Success! Result of {a}/{b} is {result}")
finally:
# Runs no matter what
print("Division attempt completed.")
divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.Implementação passo a passo
- Coloque o código que pode falhar dentro de um bloco try.
- Capture tipos de erros específicos com blocos except ExceptionType: para lidar com falhas normalmente.
- Use else para código que deve ser executado somente em blocos try bem-sucedidos.
- Utilize finalmente para garantir que as ações de limpeza sejam executadas independentemente de erros.
Perguntas frequentes
Posso capturar várias exceções em um único bloco except?
Sim, você pode passá-los como uma tupla: exceto (ValueError, TypeError) as e:.
Como faço para levantar minhas próprias exceções?
Use a palavra-chave raise seguida pela instância de exceção: raise ValueError("Valor de configuração inválido").
Tópicos Relacionados
Aprenda como converter uma string em um inteiro em Python usando a função int(). Lide com erros com segurança e converta números de binário, octal ou hexadecimal.
Como ler um arquivo em PythonAprenda como ler arquivos em Python. Domine a instrução open, readline, readlines e manipule exceções de arquivo com segurança.
Como escrever em um arquivo em PythonAprenda como escrever texto em arquivos em Python. Domine a diferença entre os modos de gravação ("w") e acréscimo ("a") com gerenciadores de contexto seguros.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Loops Python
Aprenda como usar loops Python para iterar dados. Domine as práticas recomendadas para loops for, while loops, break, continue e loop com exemplos interativos.
Folha de dicas dos métodos de string Python
Um guia de referência completo para manipulação de strings em Python. Domine a formatação, pesquisa, divisão, substituição e verificação de propriedades de string.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.