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'