【问题标题】:Python doesn't call fucntionPython不调用函数
【发布时间】:2019-06-19 11:54:03
【问题描述】:

这是一个非常奇怪的问题。蟒蛇 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 台不同的机器。

【问题讨论】:

    标签: python python-3.x xml-parsing


    【解决方案1】:

    您使用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)
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多