В 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').Я уверен, что я не вставляю символы табуляции, я использую vi w / 'set expandtab'.