gpt4 book ai didi

python - lxml.etree.tostring() 中的缩进因 Mac 和 Linux 而异

转载 作者:太空狗 更新时间:2023-10-29 12:06:50 26 4
gpt4 key购买 nike

Python 的 lxml.etree.tostring() 在 Mac 和 Linux 上的缩进不同——缩进似乎是 Linux 上的两倍。它炸毁了我的单元测试。

显然 lxml.etree 没有公开任何设置默认缩进值的路径。

有人知道这里会发生什么吗?

编辑添加代码:

我确定代码是相同的,计算机通过 github 共享它。

测试代码如下:

    chk = """\
<field>
<id>7135260</id>
<name>lastname</name>
<label>Last Name</label>
<type/>
</field>"""

res = etree.tostring((xml_obj.xpath(xp_str))[0], pretty_print=True)

self.assertMultiLineEqual(
chk,
res.rstrip()
)

这在 Linux 上通过了,但在 Mac 上失败了,错误报告如下:

-       <id>7135260</id>
+ <id>7135260</id>
? ++++++
- <name>lastname</name>
+ <name>lastname</name>
? ++++++
- <label>Last Name</label>
+ <label>Last Name</label>
? ++++++
- <type/>
+ <type/>
? ++++++
- </field>
+ </field>
? ++++

但是当我隔离有问题的代码时,它在两者上输出相同的内容:

data_str    =   """\
<response>
<fields>
<field>
<id>7135259</id>
<name>firstname</name>
<label>First Name</label>
<type/>
</field>
<field>
<id>7135260</id>
<name>lastname</name>
<label>Last Name</label>
<type/>
</field>
</fields>
<status>success</status>
</response>
"""

data_xml = etree.fromstring(data_str)

res = etree.tostring(
(data_xml.xpath('//*[name="lastname"]/name/..'))[0],
pretty_print=True)

print res

这在两个平台上提供了相同的缩进。

所以无论奇怪的是什么,它都位于/由 unittest2 引起。在这一点上,这可能不是一个很好的问题。

进一步编辑:

当我将比较项包装在 repr() 中时,我得到:

- '<field>\n      <id>7135260</id>\n      <name>lastname</name>\n      <label>Last Name</label>\n      <type/>\n    </field>'
+ '<field>\n <id>7135260</id>\n <name>lastname</name>\n <label>Last Name</label>\n <type/>\n </field>\n \n'
? ++++++ ++++++ ++++++ ++++++ ++++ ++++++++++++

该输出实际上在一行中。我先插入了换行符 + 符号和 ?性格。

我已经在测试输出中搜索了制表符 ('\t')。我确定我没有插入制表符,我正在使用带有“set expandtab”的 vi。

最佳答案

在每种情况下,您是否对 tostring() 使用了完全相同的参数?您是否尝试过关闭缩进以检查这是否真的是问题所在?

向我们展示您调用 tostring() 的代码。创建一个小示例树并向我们展示每个操作系统上 print len(result_of_tostring), repr(result_of_tostring) 的结果。还要告诉我们您如何将结果传输到其他系统进行比较,并向我们展示该比较的代码。

更新:您的“chk”字符串的缩进看起来很可疑。我建议 lxml 没有错,你有一个实验错误,有空格差异。您是否从代码中删除了所有 TAB?您确定您没有使用将制表符替换为空格或反之亦然的编辑器打开/保存代码吗? 为什么不按照建议使用 repr() 来准确/明确地显示不相等的字符串是什么?

更新 2:在您的源代码中搜索选项卡。大多数行的“chk”显示源缩进为 6。

关于python - lxml.etree.tostring() 中的缩进因 Mac 和 Linux 而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718072/

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