Instrukcja return w Pythonie nie przerywa pętli
Sep 15 2020
Chciałbym powtórzyć strukturę XML. Mój kod wydaje się działać. Sprawdziłem debugger i zobaczyłem, że dotarł do return, ale forpętla trwa.
Czekam na twoją radę, dziękuję!
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'
Odpowiedzi
3 Homer Sep 15 2020 at 21:28
Problem polega na tym, że wywołujesz tę samą funkcję instrukcji else. Tak więc, jeśli wejdzie w blok else, może działać rekurencyjnie. Spróbuj zmienić swój kod, unikając wywoływania funkcji od wewnątrz. Konieczne może być również umieszczenie powrotu wewnątrz pętli for, wyróżnionej poniżej
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
Zapomniałeś returninstrukcji zaraz po rozpoczęciu wywołań rekurencyjnych. Oznacza to, że będzie trwać wiecznie, aż zostanie osiągnięty maksymalny limit rekurencji lub zabraknie pamięci.
zmień swój kod w ten sposób
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'