Оператор возврата Python не прерывает цикл

Sep 15 2020

Я хотел бы пройтись по структуре XML. Кажется, мой код работает. Я проверил отладчик и увидел, что он достиг return, но forцикл продолжается.

Жду вашего совета, спасибо!

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'

Ответы

3 Homer Sep 15 2020 at 21:28

Здесь проблема в том, что вы вызываете ту же функцию, что и оператор else. Итак, если он входит в блок else, он может продолжаться рекурсивно. Попробуйте изменить свой код, избегая вызова функции изнутри. Кроме того, вам может потребоваться поместить return внутри цикла for, выделенного ниже

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

Вы забыли returnинструкцию прямо при запуске рекурсивных вызовов. Это означает, что это будет продолжаться вечно, пока не будет достигнут максимальный предел повторения или не закончится память.

измените свой код вот так

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'