1
resposta

[Dúvida] Retorno da função acesso_via_cep

Tentei fazer um for loop na função para retornar todas as informações contidas na váriavel dados mas o return ja retorna a primeira incidencia do laço e encerra o loop. Tem alguma forma de eu conseguir fazer o output das informações contidas em dados sem precisar parar de usar o for loop e sem inserir essas informações em uma estrutura de dados como um array?

import re
import requests


class BuscaEndereco:

    def __init__(self, cep):
        if self.cep_e_valido(cep):
            self.cep = cep
        else:
            raise ValueError("CEP Inválido")

    def __str__(self):
        return self.format_cep()

    @staticmethod
    def cep_e_valido(cep):
        if type(cep) != str:
            raise TypeError(f"Tipo do parámetro inválido. Tipo esperado: <class 'str'>, Tipo recebido: {type(cep)}")
        else:
            if len(cep) == 8:
                return True
            else:
                return False

    def format_cep(self):
        # O Retorno da função pode ser feito por fatiamento de Strings ou usando a biblioteca ReGex(re)
        # Usando ReGex
        padrao = "([0-9]{5})([0-9]{3})"
        cep_para_formartar = re.search(padrao, self.cep)
        cep_formatado = f"{cep_para_formartar.group(1)}-{cep_para_formartar.group(2)}"
        # Usando Fatiamento de Strings
        cep_formatado_2 = f"{self.cep[:5]}-{self.cep[5:]}"
        return cep_formatado

    def acesso_via_cep(self):
        url = f"https://viacep.com.br/ws/{self.cep}/json/"
        requisicao = requests.get(url)
        dados = requisicao.json()
        for key in dados:
            return f"{key}: {dados[key]}"
1 resposta

O problema é que o return é executado na primeira iteração do loop, fazendo com que a função seja encerrada e retorne apenas o primeiro resultado. Uma forma de retornar todos os resultados é criar uma lista e adicionar cada resultado a ela, e depois retornar a lista completa. Por exemplo:

def acesso_via_cep(self):
    url = f"https://viacep.com.br/ws/{self.cep}/json/"
    requisicao = requests.get(url)
    dados = requisicao.json()
    resultado = []
    for key in dados:
        resultado.append(f"{key}: {dados[key]}")
    return resultado

Dessa forma, a função irá retornar uma lista contendo uma string para cada chave-valor encontrada no dicionário retornado pela API do ViaCEP.

Se isso solucionou seu problema, não se esquece de marcar como solucionado!