Conceitos Fundamentais de Exceções
Exceções são eventos inesperados que ocorrem durante a execução de um programa, interrompendo o fluxo normal do código. Exemplos comuns incluem acessar variáveis não definidas ou tentar abrir arquivos inexistentes.
# Exemplo de exceção durante a divisão por zero
try:
resultado = 50 / 0
print(resultado)
except ZeroDivisionError as erro:
print(f"Erro capturado: {erro}")
# Saída: Erro capturado: division by zero
Quando uma exceção ocorre, Python gera um objeto de exceção que contém informações como tipo de erro, mensagem e localização no código.
Tipos Comuns de Exceções Internas
| Exceção | Cenário de Uso | Exemplo |
|---|---|---|
| NameError | Acesso a variáveis não declaradas | print(variavel_inexistente) |
| TypeError | Operações com tipos incompatíveis | "texto" + 10 |
| ValueError | Parâmetros com valores inadequados | int("abc") |
| IndexError | Índice fora dos limites de uma lista | [1, 2, 3][10] |
| KeyError | Chave inexistente em um dicionário | {"chave": 1}["outra"] |
| FileNotFoundError | Tentativa de abrir arquivo não existente | open("dados.txt") |
Sintaxe para Tratamento de Exceções
Use a estrutura try-except para catpurar e tratar exceções de forma controlada.
try:
operacao = 100 / 0
print("Operação concluída")
except ZeroDivisionError:
print("Não é possível dividir por zero")
else:
print("Nenhuma exceção ocorreu")
finally:
print("Execução finalizada")
# Saída:
# Não é possível dividir por zero
# Execução finalizada
Para capturar múltiplas exceções, encadeie blocos except:
try:
valor = int("abc")
calculo = 10 / 0
except ValueError as e:
print(f"Erro de valor: {e}")
except ZeroDivisionError as e:
print(f"Erro de divisão: {e}")
# Saída: Erro de valor: invalid literal for int() with base 10: 'abc'
A classe Exception pode capturar qualquer exceção, mas é recomendado ser específico quando possível.
Provocando Exceções Manualmente
Use a instrução raise para disparar exceções intencionalmente, útil para validações.
def validar_idade(idade):
if idade < 0:
raise ValueError("Idade não pode ser negativa")
return idade
try:
validar_idade(-10)
except ValueError as erro:
print(f"Validação falhou: {erro}")
# Saída: Validação falhou: Idade não pode ser negativa
Você também pode relançar exceções capturadas com raise sem argumentos.
try:
open("arquivo_inexistente.txt")
except FileNotFoundError:
print("Arquivo não encontrado, propagando exceção")
raise
# Exceção será levantada novamente após a mensagem
Compreensões em Python
Compreensões são construções concisas para criar sequências, baseadas em loops.
Compreensão de Lista
# Gerar lista de quadrados pares
quadrados_pares = [num ** 2 for num in range(10) if num % 2 == 0]
print(quadrados_pares)
# Saída: [0, 4, 16, 36, 64]
Compreensão de Dicionário
Combine listas para formar dicionários de maneira eficiente.
chaves = ["nome", "idade", "cidade"]
valores = ["Maria", 30, "São Paulo"]
dicionario = {chave: valor for chave, valor in zip(chaves, valores)}
print(dicionario)
# Saída: {'nome': 'Maria', 'idade': 30, 'cidade': 'São Paulo'}
Compreensão de Conjunto
Útil para remover duplicatas ao criar conjuntos.
numeros_com_duplicatas = [1, 2, 2, 3, 3, 4]
conjunto_unico = {x for x in numeros_com_duplicatas}
print(conjunto_unico)
# Saída: {1, 2, 3, 4}