【问题标题】:Gracefully recover from parse error in lxml优雅地从 lxml 中的解析错误中恢复
【发布时间】:2015-02-21 13:09:48
【问题描述】:

我想继续解析无效的 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”)。如果我在没有任何尝试/例外的情况下运行它,只需使用“recover=True”,root 设置正确并处理文件。我在哪里做错了?

【问题讨论】:

  • 您的代码似乎不完整,无法进行功能测试并显示您的问题。我已经导入了你忘记的模块,创建了一个格式错误的 xml 文件,声明了 misformattedXMLFile 变量,没有触及任何其他内容,它按预期工作。
  • 感谢Birei的回复。实际上,问题在于“原始文件”(我从中获取 XML 数据的源 XML 文件) try/except 块之前打开。这造成了一个问题,因为一旦“try”块使用了原始文件,它在“except”块中的状态就不一样了,这进一步混淆了整个代码。我通过将文件打开例程移动到 try/except 块中来解决此问题。

标签: python xml parsing exception lxml


【解决方案1】:

你可以使用finally

try:
   #something
except etree.XMLSyntaxError:
    #onotherthing

finally:
    root = tree.getroot()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 2015-10-29
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-02-06
    相关资源
    最近更新 更多