1
resposta

Enfrentenado um TypeError na construtora __str__

Oi pessoal, tudo bem? Com o objetivo de fixar os conceitos, eu costumo escrever meu um pouco diferente do que foi construído na aula. só que estou enfenrentando um problema de type error no retorno do str do meu código. Ainda não evoluí para utilização das bibliotecas externas de validação de cpf, então, tudo o que está sendo usando no meu código é instanciado no próprio código.

veja que eu até passo uma validação para verificar se o que está retornando como número de documento realmente é uma string (print(type(self.numdoc))), e o retorno é positivo.

Meu código completo:

class ValidaCPF:

    def __init__(self, numdoc):
        numdoc = str(numdoc)
        self.numdoc = numdoc
        doclen = len(numdoc)
        self.validaDigitos(doclen)
        
    def __str__(self):
        return self.formataMascara()
        

    def validaDigitos(self, doclen):
        if doclen == 11:
            
            print(type(self.numdoc))  #validando o tipo para ter certeza de que está chegando um str no __str__
             
        else:
            raise ValueError('!! Quantidade de dígitos do CPF está incorreta !!')
    
    def formataMascara(self):
        trecho1 = self.numdoc[0:3]
        trecho2 = self.numdoc[3:6]
        trecho3 = self.numdoc[6:9]
        trecho4 = self.numdoc[9:11]
        return (print(f" Documento formatado pela máscara: {trecho1}.{trecho2}.{trecho3}-{trecho4}"))

Estou chamando da seguinte forma:

from rascunho_classes import ValidaCPF

cpf1 = 35249935618
doc1 = ValidaCPF(cpf1)
print(doc1)

O retorno é o seguinte:

<class 'str'>
 Documento formatado pela máscara: 352.499.356-18
Traceback (most recent call last):
  File "c:\Users\rafael.franco\Documents\pythonAlura\rascunho.py", line 8, in <module>
    print(doc1)
TypeError: __str__ returned non-string (type NoneType)
PS C:\Users\rafael.franco\Documents\pythonAlura>

poderiam me orientar para me ajudar a resolver esse enrosco? :)

Veja que mesmo retornando o type error, ainda sim ele devolve a máscara formatada. de alguma forma a construtora str está funcionando, mesmo com a exceção.

1 resposta

Oi Rafael, tudo bem?

Legal que você cria o código de outra forma! Com certeza essa atitude de se desafiar para colocar a mão na massa engrandece muito sua experiência de aprendizagem.

O erro está acontecendo porque o método formataMascara está retornando a função print, e não a string formatada. Tente mudar o return para o seguinte:

return f"Documento formatado pela máscara: {trecho1}.{trecho2}.{trecho3}-{trecho4}"

Espero que essa dica te ajude!

Grande abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!