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

Código dando erro, o que poderia ser?

código do main.py:

from ExtratorArgumentosUrl import ExtratorArgumentosUrl

''' url = "https://www.bytebank.com.br/cambio?moedaorigem=moedadestino&moedadestino=dolar&valor=700"

argumento = "Lucas Gonçalves Dias"

#............0123456789 11 15 listaUrl = argumento.split(" ") print(listaUrl)''' url = "https://bytebank.com/cambio?moedaorigem=moedadestino&moedadestino=dolar$valor=1500"

find

argumentosUrl = ExtratorArgumentosUrl(url) moedaOrigem, moedaDestino = argumentosUrl.extraiArgumentos() valor = argumentosUrl.extraiValor() print(moedaDestino,moedaOrigem,valor) print(len(argumentosUrl))

index = url.find("moedadestino") + len ("moedadestino") + 1

substring = url[index:]

print(substring)

#string = "bytebankbytebyte"

#stringNova = string.replace("byte", "rodrigo",1)

#print(stringNova) ''' banco1 = "bytebank" banco2 = "Bytebank".lower()

#print(banco2)

urlByteBank = "https://bytebank.com" url1 = "https://buscasites.com/busca?q=https://bytebank.com" url2 = "https://bitebank.com.br" url3 = "https://bytebank.com/cambio/teste/teste"

print (url1.startswith(urlByteBank)) '''

print(argumentosUrl)

código do ExtratorArgumentosUrl:

class ExtratorArgumentosUrl:

def __init__(self, url):
    if self.urlEhValida(url):
       self.url = url.lower()
    else:
        raise LookupError("Url, Inválida!!!!!")

def __len__(self):
    return len(self.url)

def __str__(self):
    moedaOrigem, moedaDestino = self.extraiArgumentos()
    representacaoString = self.extraiValor() "Valor:" + " " + moedaOrigem + " " + moedaDestino
    return representacaoString

@staticmethod
def urlEhValida(url):
    if url and url.startswith("https://bytebank.com"):
        return True
    else:
        return False

def extraiArgumentos(self):

    buscaMoedaOrigem = "moedaorigem=".lower()
    buscaMoedaDestino = "moedadestino=".lower()

    indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
    indiceFinalMoedaOrigem = self.url.find("&")

    moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

    if moedaOrigem == "moedadestino":
        self.trocaMoedaOrigem()
        indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
        indiceFinalMoedaOrigem = self.url.find("&")
        moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

        indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
        indiceFinalMoedaDestino = self.url.find("$valor")
        moedaDestino = self.url[indiceInicialMoedaDestino:indiceFinalMoedaDestino]

        return moedaOrigem,moedaDestino

def encontraIndiceInicial(self,moedaBuscada):
    return self.url.find(moedaBuscada) + len(moedaBuscada)

def trocaMoedaOrigem(self):
    self.url = self.url.replace("moedadestino", "real", 1)
    print(self.url)

def extraiValor(self):
    buscaValor = "valor="
    indiceInicalValor = self.encontraIndiceInicial(buscaValor)
    valor = self.url[indiceInicalValor:]
    return valor

entretanto:

C:\Users\Lucas\PycharmProjects\pythonProject\pythonProject4\venv\Scripts\python.exe C:/Users/Lucas/PycharmProjects/pythonProject/pythonProject4/main.py Traceback (most recent call last): File "C:\Users\Lucas\PycharmProjects\pythonProject\pythonProject4\main.py", line 1, in from ExtratorArgumentosUrl import ExtratorArgumentosUrl File "C:\Users\Lucas\PycharmProjects\pythonProject\pythonProject4\ExtratorArgumentosUrl.py", line 14 representacaoString = self.extraiValor() "Valor:" + " " + moedaOrigem + " " + moedaDestino ^ SyntaxError: invalid syntax

Process finished with exit code 1

o que poderia ser isso? desde já agradeço!

4 respostas

Bom dia Lucas, tudo bem? Espero que sim!

Na sua classe ExtratorArgumentosUrl, no método__str__(), você escreveu:

representacaoString = self.extraiValor() "Valor:" + " " + moedaOrigem + " " + moedaDestino

Está faltando concatenar o self.extraiValor(), e isso está ocasionando um erro. Uma vez que está sendo atribuído à variável representacaoString e logo após tem uma string que o python não vai saber o que fazer com ela. Substitua essa parte por:

representacaoString =  "Valor:" + self.extraiValor() + " " + moedaOrigem + " " + moedaDestino

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Olá João, primeiramente obrigado pela atenção!

porém o problema persiste

class ExtratorArgumentosUrl:

def __init__(self, url):
    if self.urlEhValida(url):
       self.url = url.lower()
    else:
        raise LookupError("Url, Inválida!!!!!")

def __len__(self):
    return len(self.url)

def __str__(self):
    moedaOrigem, moedaDestino = self.extraiArgumentos()
    representacaoString2 = "Valor:" + self.extraiValor() + " " + moedaOrigem + " " + moedaDestino
    representacaoString = "Valor: {}\n Moeda Origem: {} \n Moeda Destino: {} \n".format(self.extraiValor(), moedaOrigem,moedaDestino)
    return representacaoString

@staticmethod
def urlEhValida(url):
    if url and url.startswith("https://bytebank.com"):
        return True
    else:
        return False

def extraiArgumentos(self):

    buscaMoedaOrigem = "moedaorigem=".lower()
    buscaMoedaDestino = "moedadestino=".lower()

    indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
    indiceFinalMoedaOrigem = self.url.find("&")

    moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

    if moedaOrigem == "moedadestino":
        self.trocaMoedaOrigem()
        indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
        indiceFinalMoedaOrigem = self.url.find("&")
        moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

        indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
        indiceFinalMoedaDestino = self.url.find("$valor")
        moedaDestino = self.url[indiceInicialMoedaDestino:indiceFinalMoedaDestino]

        return moedaOrigem,moedaDestino

def encontraIndiceInicial(self,moedaBuscada):
    return self.url.find(moedaBuscada) + len(moedaBuscada)

def trocaMoedaOrigem(self):
    self.url = self.url.replace("moedadestino", "real", 1)
    print(self.url)

def extraiValor(self):
    buscaValor = "valor="
    indiceInicalValor = self.encontraIndiceInicial(buscaValor)
    valor = self.url[indiceInicalValor:]
    return valor

(Código no atual Estado)

resultado:

C:\Users\Lucas\PycharmProjects\pythonProject\pythonProject4\venv\Scripts\python.exe C:/Users/Lucas/PycharmProjects/pythonProject/pythonProject4/main.py https://bytebank.com/cambio?moedaorigem=real&moedadestino=dolar$valor=1500 dolar real 1500 74 Traceback (most recent call last): File "C:\Users\Lucas\PycharmProjects\pythonProject\pythonProject4\main.py", line 41, in print(argumentosUrl) File "C:\Users\Lucas/\PycharmProjects\pythonProject\pythonProject4\ExtratorArgumentosUrl.py", line 13, in str moedaOrigem, moedaDestino = self.extraiArgumentos() TypeError: cannot unpack non-iterable NoneType object

Process finished with exit code 1

solução!

Olá Lucas,

Isso está acontecendo porque na função extraiArgumentos() está com elementos indentados dentro do if, mas não deveriam estar, isso faz com que o return não seja executado se não entrar no if.

Corrija da seguinte forma:

def extraiArgumentos(self):

    buscaMoedaOrigem = "moedaorigem=".lower()
    buscaMoedaDestino = "moedadestino=".lower()

    indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
    indiceFinalMoedaOrigem = self.url.find("&")

    moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

    if moedaOrigem == "moedadestino":
        self.trocaMoedaOrigem()
        indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
        indiceFinalMoedaOrigem = self.url.find("&")
        moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

    indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
    indiceFinalMoedaDestino = self.url.find("$valor")
    moedaDestino = self.url[indiceInicialMoedaDestino:indiceFinalMoedaDestino]

    return moedaOrigem,moedaDestino

Agora acho que vá funcionar.

Muito Obrigado, agora deu certo! :)