L'istruzione return di Python non interrompe il ciclo for
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
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'
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'