L'istruzione return di Python non interrompe il ciclo for

Sep 15 2020

Vorrei iterare attraverso una struttura XML. Il mio codice sembra funzionare. Ho controllato il debugger e ho visto che ha raggiunto il return, ma il forciclo continua.

In attesa del tuo consiglio, grazie!

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'

Risposte

3 Homer Sep 15 2020 at 21:28

Qui il problema è che stai chiamando la stessa funzione è l'istruzione else. Quindi, se entra nel blocco else, potrebbe andare avanti in modo ricorsivo. Prova a modificare il tuo codice, evitando di chiamare la funzione dall'interno. Inoltre, potrebbe essere necessario inserire return all'interno del ciclo for, evidenziato di seguito

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

Hai dimenticato una returndichiarazione proprio quando avvii le chiamate ricorsive. Significa che andrebbe avanti all'infinito fino al raggiungimento del limite massimo di ricorsività o fino a esaurimento della memoria.

cambia il tuo codice in questo modo

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'