3
respostas

Erro para CPFs começando com zero

    Olá, segui o código como apresentado na aula, funciona perfeitamente para CPFs passados como "str". Para CPFs passados como integer funciona apenas se não começar com zero.

    Segue o código:

from validate_docbr import CPF

class Cpf:

def init(self, documento): documento = str(documento) if self.valida_cpf(documento): self.cpf = documento else: raise ValueError('CPF inválido')

def str(self): return self.formata_cpf()

def valida_cpf(self, cpf): if len(cpf) == 11: validador = CPF() return validador.validate(cpf) else: return False

def formata_cpf(self): mascara = CPF() return mascara.mask(self.cpf)

cpf = 04096352195

objeto_cpf = Cpf(cpf)

print(objeto_cpf)

Se passar o CPF acima entre aspas, o código funciona, da forma que está retorna o seguinte erro: SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers

Este erro ocorre apenas para CPF que iniciam com zero, outros CPFs funcionam mesmo passados como integer.

3 respostas

Durante a aula o cpf é passado como string, no seu caso você passou o cpf como inteiro, pra resolver todos os problemas é só mandar o cpf como string:

#muda disso:
cpf = 04096352195
#pra isso
cpf = "04096352195"

Se você mantiver como um inteiro usando a solução pra esse seu erro atual você vai ter erro depois ao tentar medir a length (comprimento) "len()" do seu cpf.

A solução pra esse erro de ter um 0 no inicio do inteiro é simples, basta colocar um o depois do seu 0. Fica assim:

cpf = 0o4096352195

Isso informa pro python que você quer que esse 0 fique ali na frente mesmo sem isso ser o normal de acontecer (você não sai contando 01, 02, 03, 04... e o python também não, até porque como os numeros são infinitos se voce fosse começar com o 0 você teria sempre que pensar até quanto quer contar antes de começar e contar por exempo 0001 se quiser contar até 1000).

Certo, entendi que se passar como str ou com o "o" funciona, mas não gostaria que o usuário tivesse que digitar o CPF entre aspas ou colocar um "o " entre os números, como posso resolver para que o usuário possa simplesmente digitar o CPF?

Tentei transformar o CPF passado para Str dessa forma mas não funcionou: def init(self, documento): documento = str(documento)

O usuário não vai criar a classe, se você quer simular um usuário usando seu código faz um input e pega o resultado desse input e usa pra criar a classe:

cpf = input("Digite o cpf que você quer validar")
objeto_cpf = Cpf(cpf)

O input ja vem em string então você n precisa converter nada, mas sempre que você tiver testando você vai ter que escrever o input e é uma boa prática tbm você validar se n tem nenhum "lixo" dentro desse imput, por exemplo uma letra, um espaço ou um input vazio.

Se você quiser facilitar seus testes você pode reatribuir um cpf padrão se seu input não tiver nada por exemplo.

cpf = input("Digite o cpf que você quer validar")
if cpf == "":
    cpf = "04096352195"
objeto_cpf = Cpf(cpf)

Assim pra você testar se ta funcionando é só dar enter sem digitar nada e você não vai precisar escrever o cpf toda hora.