A instrução de retorno do Python não interrompe o loop

Sep 15 2020

Eu gostaria de iterar por meio de uma estrutura XML. Meu código parece funcionar. Verifiquei o depurador e vi que atingiu o return, mas o forloop continua.

Aguardo seu conselho, obrigado!

def get_value(root, item):
    for node in root:
        if node.tag == item:
            return node.tag
        else:
            get_value(node, item)
    return 'Item not found in XML'

Respostas

3 Homer Sep 15 2020 at 21:28

O problema é que você está chamando a mesma função e a instrução else. Portanto, se entrar no bloco else, poderá continuar recursivamente. Tente alterar seu código, evitando chamar a função de dentro. Além disso, pode ser necessário colocar return dentro do loop for, destacado abaixo

def get_value(root, item):
    for node in root:
        if node.tag == item:
            return node.tag
        else:
            get_value(node, item) ---> This is the problem
        return 'Item not found in XML'
3 DevCl9 Sep 15 2020 at 21:43

Você esqueceu um returnextrato assim que iniciou chamadas de recursão. O que significa que duraria para sempre até que o limite máximo de recorrência seja atingido ou fique sem memória.

mude seu código assim

def get_value(root, item):
    for node in root:
        if node.tag == item:
            return node.tag
        else:
            return get_value(node, item)
    return 'Item not found in XML'