Die Python-Rückgabeanweisung wird nicht für die Schleife unterbrochen

Sep 15 2020

Ich möchte eine XML-Struktur durchlaufen. Mein Code scheint zu funktionieren. Ich habe den Debugger überprüft und festgestellt, dass er den erreicht hat return, aber die forSchleife wird fortgesetzt.

Ich freue mich auf Ihren Rat, danke!

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'

Antworten

3 Homer Sep 15 2020 at 21:28

Hier ist das Problem, dass Sie dieselbe Funktion aufrufen. Wenn es also in den else-Block eingeht, wird es möglicherweise rekursiv fortgesetzt. Versuchen Sie, Ihren Code zu ändern, und vermeiden Sie es, die Funktion von innen aufzurufen. Möglicherweise müssen Sie auch die Rückgabe innerhalb der for-Schleife platzieren, die unten hervorgehoben ist

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

Sie haben eine returnAnweisung direkt beim Starten von Rekursionsaufrufen vergessen . Dies bedeutet, dass es für immer weitergehen würde, bis das maximale Wiederholungslimit erreicht ist oder der Speicherplatz knapp wird.

Ändern Sie Ihren Code so

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'