Esta seção reúne os padrões de código mais comuns e importantes para o tratamento de exceções em Python, servindo como uma consulta rápida para as estruturas chave.
Bloco try-except
(Básico)
Uso: Capturar e lidar com exceções específicas ou genéricas.
Sintaxe:
try:
# Código que pode levantar uma exceção
resultado = 10 / 0
except ZeroDivisionError:
# Bloco executado se ZeroDivisionError ocorrer
print("Erro: Divisão por zero!")
Bloco try-except-else-finally
(Completo)
Uso: Controle abrangente do fluxo: try
(código principal), except
(tratamento de erro), else
(se não houver erro), finally
(sempre executado).
Sintaxe:
try:
arquivo = open("dados.txt", "r")
conteudo = arquivo.read()
except FileNotFoundError:
print("Erro: O arquivo não foi encontrado.")
else:
print(f"Conteúdo do arquivo: {conteudo}")
finally:
if 'arquivo' in locals() and not arquivo.closed:
arquivo.close()
print("Arquivo fechado (via finally).")
Capturando Múltiplas Exceções
Uso: Tratar diferentes tipos de exceções no mesmo bloco except
ou em blocos separados (do mais específico ao mais genérico).
Sintaxe (tupla):
try:
valor = int("abc")
except (ValueError, TypeError):
print("Erro: Tipo de valor inválido ou conversão.")
Sintaxe (múltiplos excepts - ordem importa):
try:
minha_lista = [1, 2, 3]
print(minha_lista[5])
except IndexError:
print("Erro: Índice fora dos limites da lista!")
except Exception as e: # Captura qualquer outra exceção genérica
print(f"Ocorreu um erro inesperado: {e}")
Levantando Exceções (raise
)
Uso: Forçar a ocorrência de uma exceção em seu próprio código para indicar uma condição de erro.
Sintaxe:
def verificar_idade(idade):
if not isinstance(idade, int):
raise TypeError("A idade deve ser um número inteiro.")
if idade < 0:
raise ValueError("A idade não pode ser negativa.")
return "Idade válida!"
# Exemplo de uso:
try:
verificar_idade(-5)
except ValueError as e:
print(f"Erro ao verificar idade: {e}")
A Função assert
Uso: Usada para verificar se uma condição é verdadeira. Se for falsa, levanta um AssertionError
. Ideal para depuração e testes, não para erros de produção esperados.
Sintaxe:
def calcular_area_retangulo(largura, altura):
assert largura > 0 and altura > 0, "Largura e altura devem ser valores positivos."
return largura * altura
# Exemplo de uso:
try:
area = calcular_area_retangulo(-2, 5)
except AssertionError as e:
print(f"Erro de asserção: {e}")
Gerenciamento de Recursos com with
(Context Managers)
Uso: Garante que recursos (como arquivos, conexões de rede) sejam devidamente fechados após o uso, mesmo que ocorram exceções.
Sintaxe:
try:
with open("meu_arquivo.txt", "w") as f:
f.write("Este é um teste.\\\\n")
# Simula um erro, o 'with' ainda garante o fechamento do arquivo
raise ValueError("Erro simulado!")
except ValueError as e:
print(f"Erro capturado: {e}. O arquivo foi fechado automaticamente pelo 'with'.")
# O arquivo 'meu_arquivo.txt' já foi fechado aqui, mesmo com a exceção.