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

meu codigo nao roda

    def valida_url(self):
        if not self.url or not self.url.startswith('https://'):
            raise ValueError('URL vazia ou Inválida !!')

        padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/cambio')
        match = padrao_url.match(self.url)
        if not match:
            raise ValueError('URL vazia ou invalida !')

Nao entendi o motivo

2 respostas

Olá,

Seria interessante postar o erro retornada para auxiliar na resposta, no entanto olhando apenas esse trecho já é possível tirar algumas conclusões.

Como o parâmetro é 'self', me leva a crear que essa função roda dentro de uma classe, e no inicializador da classe você passou a url como parâmetro, armazendo dentro de self.url. Dessa forma, se você tentar usar essa função sozinha fora da classe, quando você envia uma string (texto) para a função valida_url, logo na primeira linha ela tenta pegar self.url, sendo "self" a url que você passou. Se você digitou um link, ele vai como texto/string, e strings não permitem nada do tipo string.url, que é o que você tenta fazer ao digitar self.url.

Se você tentar rodar o código abaixo, é provável que funcione:

def valida_url(url):
    if not url or not url.startswith('https://'):
        raise ValueError('URL vazia ou Inválida !!')

    padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/cambio')
    match = padrao_url.match(url)
    if not match:
        raise ValueError('URL vazia ou invalida !') 

Se a URL não iniciar com 'https://' ou dentro do padrão do seu Regex, é esperado um erro, porém isso porque seu código criar o erro via raise.

Abs

solução!

Prezado, a mensagem de erro poderia ajudar.

Aqui no meu só funciona se eu usar self.url, porque eu coloquei a string da url direto dentro de ExtratorURL quando instanciei. A URL é um atributo da classe, então acho que tem que se referenciar a ela, dentro do método, usando o self. O instrutor não usou self, mas tinha um url ali no final que é variável global, por isso deu certo.