Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Erro ao executar

class Extrator_URL:
    def __init__(self, url):
        self.url = self.sanatiza_url(url)

    def sanatiza_url(self, url):
        return url.strip

    def validação_url(self,url):
        if url == "":
            raise ValueError("A url está vazia!")

    def extrair_url_base(self, url):
        indice_url_base = self.url.find('?')
        url_base = self.url[:indice_url_base + 1]
        return url_base

    def url_parametros(self,url_base, url):
        url_parametros = url[self.url_base + 1:]
        return url_parametros

    def buscar_parametro(self, buscar_por_parametro):
        indice_parametro = self.buscar_parametro().find(buscar_por_parametro)
        indice_valor = indice_parametro + len(buscar_por_parametro) + 1
        indice_e_comercial = self.buscar_parametro().find('&', indice_valor)

        if indice_e_comercial == -1:
            valor = self.buscar_parametro()[indice_valor:]
        else:
            valor = self.buscar_parametro()[indice_valor:indice_e_comercial]
        return valor

extrator_url = Extrator_URL("bytebank.com/cambio?moedaDestino=dolar&moedaOrigem=real")
valor_moeda_destino = Extrator_URL.buscar_parametro('moedaDestino')
print(valor_moeda_destino)

quando tento executar aparece o seguinte erro

line 33, in valor_moeda_destino=Extrator_URL.buscar_parametro('moedaDestino') TypeError: Extrator_URL.buscar_parametro() missing 1 required positional argument: 'buscar_por_parametro'

1 resposta
solução!

Olá, tudo bem com você?

O erro TypeError: buscar_parametro() missing 1 required positional argument: 'buscar_por_parametro' está sendo apresentado devido à chamada do método buscar_parametro está ocorrendo na classe Extrator_URL e não no objeto da classe extrator_url assim o argumento self não é reconhecido.

No código será necessário realizar algumas modificações além da mencionada anteriormente para que não seja apresentado outros erros no momento da execução. Deixo abaixo os pontos que devem ser modificados para que o código seja executado sem apresentar erros. Os pontos estão separados pelo nome dos métodos da classe.

Método __init__

  • Adicione a chamada do método validação_url.
      def __init__(self, url):
          self.url = self.sanatiza_url(url)
          self.validação_url(url)

Método sanatiza_url

  • Adicione os parênteses após a chamada da função strip().
      def sanatiza_url(self, url):
          return url.strip()

Método extrair_url_base

  • Remova o parâmetro url, nesse método iremos trabalhar com o atributo do objeto (self.url).

      def extrair_url_base(self):
          indice_url_base = self.url.find('?')
          url_base = self.url[:indice_url_base + 1]
          return url_base

Método url_parametros

  • Remova os parâmetros url_base e url, nesse método iremos trabalhar com o atributo do objeto (self.url).

  • Adicione a coleta do índice da url base (indice_url_base)

  • Modifique a declaração da coleta dos parâmetros da url para url_parametros = self.url[indice_url_base + 1:]

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

    Método buscar_parametro

  • Nesse método, está acontecendo a chamada do próprio método onde deveria ocorrer a chamada do método url_parametros. Faça a substituição da chamada do método buscar_parametro por url_parametros.

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

Variável valor_moeda_destino

  • Na declaração desta variável está acontecendo a chamada de um método na classe Extrator_URL e não no objeto da classe extrator_url. Faça a substituição, chamando o método no objeto.

      valor_moeda_destino = extrator_url.buscar_parametro('moedaDestino')

Após as mudanças salve o arquivo e execute-o e verifique o resultado apresentado.

Código completo com as mudanças descritas já aplicadas.

class Extrator_URL:
    def __init__(self, url):
        self.url = self.sanatiza_url(url)
        self.validação_url(url)

    def sanatiza_url(self, url):
        return url.strip()

    def validação_url(self, url):
        if url == "":
            raise ValueError("A url está vazia!")

    def extrair_url_base(self):
        indice_url_base = self.url.find('?')
        url_base = self.url[:indice_url_base + 1]
        return url_base

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

    def buscar_parametro(self, buscar_por_parametro):
        indice_parametro = self.url_parametros().find(buscar_por_parametro)
        indice_valor = indice_parametro + len(buscar_por_parametro) + 1
        indice_e_comercial = self.url_parametros().find('&', indice_valor)

        if indice_e_comercial == -1:
            valor = self.url_parametros()[indice_valor:]
        else:
            valor = self.url_parametros()[indice_valor:indice_e_comercial]
        return valor

extrator_url = Extrator_URL("bytebank.com/cambio?moedaDestino=dolar&moedaOrigem=real")
valor_moeda_destino = extrator_url.buscar_parametro('moedaDestino')
print(valor_moeda_destino)

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

Espero ter te ajudado. Fico à disposição.

Abraços e bons estudos.

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