Oi Igor, tudo bem com você?
Você pode fazer um tratamento de exceções com o Try/Except. As exceções nada são do que um retorno de erro quando ocorre algum comportamento inesperado no seu código. E quando você coloca um cpf inválido ou faltando algum digito o que aparece para você na tela são as exceções que ocorreram no código e os rastros dela(onde ocorreu e quais linhas foram afetadas). O try
é para executar um trecho de código perigoso(que tende a lançar uma exceção) e quando ocorre a exceção, o bloco except é chamado. Veja:
try:
cpf_igor = "546482619009"
objeto_cpf_igor = Cpf(cpf_igor)
print(objeto_cpf_igor)
except Exception as error:
print(error)
Resultado:
Numero de digitos incoretos
'Cpf' object has no attribute 'cpf'
Vamos fazer passo a passo o que está acontecendo no código:
- Entra no bloco
try
e tenta executar o que está dentro dele, linha a linha. - Na primeira linha temos apenas a atribuição de um número de cpf a uma variável, então tudo certo, não há erro algum.
- Na segunda linha estamos instanciando a classe
Cpf
- Quando instanciamos a classe
Cpf
, o que ela faz é:
documento = str(documento)
self.cpf_eh_valido(documento)
Ou seja, na primeira linha irá transformar o parâmetro recebido para str e na segunda linha, chamamos a função que verifica se o cpf
é válido.
Na função que verifica se o cpf é válido, caso o cpf
tenha um tamanho diferente de 11, automaticamente cairá no else
e printará: Numero de digitos incorretos
. Guarde essa informação.
Agora, na terceira linha que está dentro do nosso try, estamos printando o objeto da classe Cpf e quando fazemos isso, internamente o python irá chamar o __str__
da classe Cpf.
No __str__
da classe Cpf, ele está invocando a função que formata o cpf. Porém, lembra que na verificação para saber se o cpf é válido caímos direto no else? Com isso, não fizemos atribuição nenhuma do valor do cpf passado como parâmetro. Então, não teremos o atributo: self.cpf
. Logo, nos será lançada a exceção: 'Cpf' object has no attribute 'cpf'
.
Por isso que quando você digitar algum número de cpf inválido ou alguma quantidade de números incorreta irá apresentar alguns erros. Porém, eles podem ser tratados com o bloco try/except de forma a mostrar apenas o motivo de terem ocorrido e não um trecho gigante com os rastros do mesmo. Tudo bem?
Qualquer dúvida é só falar, estou a disposição. Abraços e bons estudos!