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__
Método sanatiza_url
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!