这是一个非常奇怪的问题。 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台differnet机器上进行了尝试。
答案 0 :(得分:2)
您使用yield
的事实意味着iter_elements_by_name_please
是一个返回generator
的函数(就像range
一样)。
您可以在official wiki page for Generators
上阅读更多内容您需要对其进行迭代以获取元素。
尝试:
for elem in iter_elements_by_name_please('test.xml', 'gabm'):
print(elem)