从 lxml 中的解析错误中优雅地恢复

Gracefully recover from parse error in lxml

我想继续解析无效的 XML 文件,但在变量中捕获无效文件的数量。试试这个:

    try:
        parser = etree.XMLParser(recover=False)
        tree = etree.parse(rawfile, parser=parser)
        print "Good XML!"
    except etree.XMLSyntaxError:
        parser = etree.XMLParser(recover=True)
        tree = etree.parse(rawfile, parser=parser)
        print "Bad XML!"
        misformattedXMLFile += 1

    root = tree.getroot()

但是当出现异常时,即使 "except" 子句被正确访问,"root" 元素也没有被设置(它是 "None")。如果我 运行 这没有任何 try/except,只是 "recover=True",root 设置正确并且文件被处理。我哪里出错了?

您可以使用 finally

try:
   #something
except etree.XMLSyntaxError:
    #onotherthing

finally:
    root = tree.getroot()