seabeck.pages.dev

Como tratar exceções na validação de CPF em Python?

Validar um CPF (Cadastro de Pessoas Físicas) no Brasil pode parecer simples, mas a realidade é que há muitos detalhes sutis que podem levar a erros se não forem tratados corretamente. A forma mais eficaz de garantir que seu código seja robusto e confiável é implementar um sistema de validação com tratamento de exceções. Isso não só evita que o programa falhe diante de entradas inválidas, mas também facilita a depuração e a manutenção do código. Com o Python, você pode criar uma solução elegante e eficiente que lida com todos os casos extremos.

Pré-requisitos

Implementando a Validação com Tratamento de Exceções

O primeiro passo é criar uma função que valide o CPF, verificando se o formato está correto e se os dígitos verificadores são válidos. Para isso, usaremos tratamento de exceções para capturar e responder a entradas inválidas de forma controlada.

def validar_cpf(cpf):
    """
    Valida um CPF, verificando formato e dígitos verificadores.
    Levanta exceções para entradas inválidas.
    """
    if not cpf:
        raise ValueError("CPF não pode ser vazio.")

    # Remove caracteres não numéricos
    cpf = ''.join(filter(str.isdigit, cpf))

    if len(cpf) != 11:
        raise ValueError("CPF deve conter 11 dígitos.")

    # Verifica se todos os dígitos são iguais
    if cpf == cpf[0] * 11:
        raise ValueError("CPF inválido: dígitos repetidos.")

    # Cálculo do primeiro dígito verificador
    soma = sum(int(digito) * peso for digito, peso in zip(cpf, range(10, 1, -1)))
    resto = soma % 11
    digito1 = 0 if resto < 2 else 11 - resto

    # Cálculo do segundo dígito verificador
    soma = sum(int(digito) * peso for digito, peso in zip(cpf, range(11, 1, -1)))
    resto = soma % 11
    digito2 = 0 if resto < 2 else 11 - resto

    # Verifica se os dígitos calculados correspondem aos informados
    if int(cpf[9]) != digito1 or int(cpf[10]) != digito2:
        raise ValueError("CPF inválido: dígitos verificadores incorretos.")

    return True

Usando a Função com Tratamento de Exceções

Agora, para usar a função de validação, você deve envolvê-la em um bloco try-except. Isso permite que você capture e trate as exceções de forma amigável, exibindo mensagens de erro claras para o usuário.

try:
    cpf = "123.456.789-09"
    if validar_cpf(cpf):
        print("CPF válido!")
except ValueError as e:
    print(f"Erro: {e}")

Exemplo Prático

Abaixo, uma tabela com exemplos de CPFs de entrada e a saída esperada do programa, demonstrando como o tratamento de exceções funciona na prática.

CPF de Entrada Saída Esperada
123.456.789-09 CPF válido!
111.111.111-11 Erro: CPF inválido: dígitos repetidos.
123.456.789 Erro: CPF deve conter 11 dígitos.
Erro: CPF não pode ser vazio.

Conclusão

Com este método, você automatiza a validação de CPFs em segundos, evitando erros manuais e garantindo que apenas dados corretos sejam processados. O tratamento de exceções não só torna seu código mais robusto, mas também melhora a experiência do usuário ao fornecer feedback claro e útil.