L'instruction de retour Python ne rompt pas la boucle for

Sep 15 2020

Je voudrais parcourir une structure XML. Mon code semble fonctionner. J'ai vérifié le débogueur et j'ai vu qu'il atteignait le return, mais la forboucle continue.

Dans l'attente de vos conseils, merci!

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'

Réponses

3 Homer Sep 15 2020 at 21:28

Ici, le problème est que vous appelez la même fonction que l'instruction else. Donc, s'il entre dans le bloc else, il peut continuer de manière récursive. Essayez de modifier votre code en évitant d'appeler la fonction de l'intérieur. En outre, vous devrez peut-être placer le retour à l'intérieur de la boucle for, mis en évidence ci-dessous

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

Vous avez oublié une returninstruction au moment où vous lancez les appels de récursivité. Cela signifie qu'il continuerait indéfiniment jusqu'à ce que la limite de récurrence maximale soit atteinte ou à court de mémoire.

change ton code comme ça

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'