1
resposta

TypeError: __str__ returned non-string (type NoneType)

Boa noite! Recebo esse erro ao rodar o programa abaixo:

telefone_br.py

import re

class TelefonesBr:
    def __init__(self,telefone):
        if self.valida_telefone(telefone):
            self.numero = telefone
        else:
            raise ValueError("Número incorreto!")

    def __str__(self):
        return self.format_numero()

    def valida_telefone(self,telefone):
        padrao = "([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})"
        resposta = re.findall(padrao,telefone)
        if resposta:
            return True
        else:
            return False

    def format_numero(self):
        padrao = "([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})"
        resposta = re.search(padrao,self.numero)
        numero_formatado = "+{}({}){}-{}".format(
            resposta.group(1),
            resposta.group(2),
            resposta.group(3),
            resposta.group(4)
        )
        print(numero_formatado)

main.py:

from telefones_br import TelefonesBr

telefone = "552126481234"
telefone_objeto = TelefonesBr(telefone)

print(telefone_objeto)

Console: TypeError: str returned non-string (type NoneType)

Alguém tem ideia do porquê?

1 resposta

Oii Thiago, tudo certinho por aí?

Isso está acontecendo por causa da linha print(numero_formatado) no método format_numero.

O correto é fazermos o retorno da variável numero_formatado, pois a função print por padrão retorna None, então quando no método __str__ há o retorno da função format_numero, o que está sendo retornado é o None devido ao uso do print. Para corrigir, modifique de print(numero_formatado) para return numero_formatado:

def format_numero(self):
    padrao = "([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})"
    resposta = re.search(padrao,self.numero)
    numero_formatado = "+{}({}){}-{}".format(
        resposta.group(1),
        resposta.group(2),
        resposta.group(3),
        resposta.group(4)
    )
    return numero_formatado

Qualquer dúvida estou por aqui.

Grande abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software