Python не вызывает функцию - PullRequest
0 голосов
/ 19 июня 2019

Это очень странная проблема.Python 3.7.

from xml.etree import ElementTree as ET


def iter_elements_by_name_please(handle, name):
    print('It works')
    events = ET.iterparse(handle, events=("start", "end",))
    _, root = next(events)  # Grab the root element.
    for event, elem in events:
        if event == "end" and elem.tag == name:
            yield elem
            root.clear()  # Free up memory by clearing the root element.


iter_elements_by_name_please('test.xml', 'gabm')

Такой код просто возвращает 0, в отладчике я вижу, что он не входит в функцию.Если я удаляю цикл for, он начинает работать как положено.Пробовал на 2 разных компьютерах на разных ОС.

1 Ответ

2 голосов
/ 19 июня 2019

тот факт, что вы используете yield означает, что iter_elements_by_name_please - это функция, которая возвращает generator (как это делает range).

вы можете прочитать больше на официальной вики-странице для генераторов

вам нужно выполнить итерацию для получения элементов.

try:

for elem in iter_elements_by_name_please('test.xml', 'gabm'):
    print(elem)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...