gpt4 book ai didi

python - 如何从 lxml 错误中获取更多信息?

转载 作者:行者123 更新时间:2023-12-04 16:30:40 24 4
gpt4 key购买 nike

因为我无法使用 XSL IDE,所以我使用 lxml 编写了一个 super 简单的 Python 脚本,以使用给定的 XSL 转换来转换给定的 XML 文件,并将结果写入文件。如下(略):

p = XMLParser(huge_tree=True)
xml = etree.parse(xml_filename, parser=p)
xml_root = xml.getroot()
print(xml_root.tag)
xslt_root = etree.parse(xsl_filename)
transform = etree.XSLT(xslt_root)
newtext = transform(xml)
with open(output, 'w') as f:
f.write(str(newtext))

我收到以下错误:

“lxml.etree.XSLTApplyError:无法评估‘select’表达式”

...但是我的 XSLT 中有很多 select 表达式。在仔细查看并隔离代码块之后,我仍然不知道是哪个 select 失败了,也不知道为什么失败。

在不尝试调试代码的情况下,有没有办法从 lxml 中获取更多信息,例如行号或失败表达式中的引号?

最佳答案

aaaaa 当然,一旦我真正花时间发布问题,我就会偶然发现答案。

这可能是 this question 的副本,但我认为这里的额外好处是事物的 Python 方面。

链接的答案指出每个解析器都包含一个您可以访问的错误日志。唯一的“技巧”是捕获这些错误,以便您可以在日志创建后查看它。

我这样做了(也许也很糟糕,但它奏效了):

import os
import lxml.etree as etree
from lxml.etree import XMLParser
import sys

xml_filename = '(some path to an XML file)'
xsl_filename = '(some path to an XSL file)'
output = '(some path to a file)'

p = XMLParser(huge_tree=True)
xml = etree.parse(xml_filename, parser=p)
xml_root = xml.getroot()
xslt_root = etree.parse(xsl_filename)
transform = etree.XSLT(xslt_root)
newtext = None
try:
newtext = transform(xml)
with open(output, 'w') as f:
f.write(str(newtext))
except:
for error in transform.error_log:
print(error.message, error.line)

此日志中的消息比打印到控制台的消息更具描述性,“行”元素会将您指向发生故障的行号。

关于python - 如何从 lxml 错误中获取更多信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45285601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com