Python 为什么在一个脚本中调用ElementTree.parse函数两次会出现异常?

Python 为什么在一个脚本中调用ElementTree.parse函数两次会出现异常?,python,xml,parsing,elementtree,Python,Xml,Parsing,Elementtree,我需要在一个脚本中处理两个xml文件。 因此,我编写了如下代码: import xml.etree.cElementTree as ET parser = ET.XMLParser(encoding='utf-8') ET.parse('../wiki.xml', parser=parser) ET.parse('../tutorial.xml', parser=parser) 但是,第二个调用parse得到了一个异常 cElementTree.ParseError: parsing fin

我需要在一个脚本中处理两个xml文件。 因此,我编写了如下代码:

import xml.etree.cElementTree as ET

parser = ET.XMLParser(encoding='utf-8')
ET.parse('../wiki.xml', parser=parser)
ET.parse('../tutorial.xml', parser=parser)
但是,第二个调用
parse
得到了一个异常

cElementTree.ParseError: parsing finished
但是,我确保这两个xml文件都没有内部问题,因为当我更改顺序时,第二个调用总是会出现异常,如果我保留了一个,则没有问题


那么,为什么在一个脚本中调用ElementTree.parse函数两次会出现异常呢?

您应该为每个树创建新的解析器。因为解析器在内部保存已解析的状态,所以它不能用于解析另一棵树

import xml.etree.cElementTree as ET

parser1 = ET.XMLParser(encoding='utf-8')
ET.parse('../wiki.xml', parser=parser1)
parser2 = ET.XMLParser(encoding='utf-8')
ET.parse('../tutorial.xml', parser=parser2)

您还可以在构建下一棵树之前删除每棵树:

import xml.etree.ElementTree as ET
...
for xml_file in xml_files:
    tree = ET.parse(xml_file)
    root = tree.getroot()
    analyze_one_file(root)
    del root
    del tree

这个解决方案是正确的,谢谢!然而,现有的一种方法是否可以清除解析器的状态?从现在起,我看不到。您可以尝试使用
close()
方法,但我不确定它是否能奏效。