Exceções e Compreensões em Python

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}

Tags: Python Exceções Tratamento de Exceções Compreensão de Lista Compreensão de Dicionário

Publicado em 6-1 10:50 por Thomas