Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Erro no código do ExtratorURL

Código;


class ExtratorURL:
    def __init__(self, url):
        self.url = self.sanitiza_url(url)
        self.valida_url()

    def sanitiza_url(self, url):
        if type(url) == str:
            return url.strip()
        else:
            return ''

    def valida_url(self,):
        if not self.url:
            raise ValueError('A URL está vazia')

    def get_url_base(self):
        indice_interrogacao = self.url('?')
        url_base = self.url[:indice_interrogacao]
        return url_base

    def get_url_parametros(self):
        indice_interrogacao = self.url('?')
        url_parametros = self.url[indice_interrogacao + 1:]
        return url_parametros

    def get_valor_parametro(self, parametro_busca):
        indice_parametro = self.get_url_parametros().find(parametro_busca)
        indice_valor = indice_parametro + len(parametro_busca) + 1
        indice_e_comercial = self.get_url_parametros().find('&', indice_valor)
        if indice_e_comercial == -1:
            valor = self.get_url_parametros()[indice_valor:]
        else:
            valor = self.get_url_parametros()[indice_valor:indice_e_comercial]
        return valor


extrator_url = ExtratorURL('quantidade')
valor_quantidade = extrator_url.get_valor_parametro('quantidade')
print(valor_quantidade)

Erro;

Traceback (most recent call last):
  File "C:\Users\USER\PycharmProjects\StringURL\extrator.py", line 39, in <module>
    valor_quantidade = extrator_url.get_valor_parametro('quantidade')
  File "C:\Users\USER\PycharmProjects\StringURL\extrator.py", line 28, in get_valor_parametro
    indice_parametro = self.get_url_parametros().find(parametro_busca)
  File "C:\Users\USER\PycharmProjects\StringURL\extrator.py", line 23, in get_url_parametros
    indice_interrogacao = self.url('?')
TypeError: 'str' object is not callable
2 respostas
solução!

Olá Gabriel, tudo bem com você?

O erro de tipo apresentado (TypeError) está acontecendo devido a tentativa de realização da chamada do atributo self.url como se ele fosse um método ou função. No código a seguinte linha está gerando o erro: self.url('?').

Será necessário realizarmos uma mudança no momento da coleta do índice de interrogação (indice_interrogacao), nos métodos get_url_base e get_url_parametros, no momento em que é feito a coleta está faltando a função find(), que será responsável por realizar a procura do sinal de interrogação.

Devemos declarar a busca pelo sinal da seguinte forma.

indice_interrogacao = self.url.find('?')

Note que foi adicionado a função find() ao final.

Métodos completos para comparação

def get_url_base(self):
    indice_interrogacao = self.url.find('?')
    url_base = self.url[:indice_interrogacao]
    return url_base

def get_url_parametros(self):
    indice_interrogacao = self.url.find('?')
    url_parametros = self.url[indice_interrogacao + 1:]
    return url_parametros

Para realizarmos o teste de forma correta, devemos informar uma URL no momento da instanciação (criação) do objeto extrator_url pertencente a classe ExtratorURL. Deixo abaixo um exemplo.

extrator_url = ExtratorURL('bytebank.com/cambio?quantidade=35')
valor_quantidade = extrator_url.get_valor_parametro('quantidade')
print(valor_quantidade)

Executando o código com as informações acima, será impresso no terminal o número 35.

Peço que modifique os pontos mencionados, salve o arquivo e execute-o.

Lembre-se que pode contar sempre com o fórum Alura, seja para tirar suas dúvidas ou para compartilhar o seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

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

indice_interrogacao = self.url('?') deveria ser indice_interrogacao = self.url.index('?') Vc ta tentando chamar uma str usando (), é a mesma coisa que usar "teste"(), n.