В чем причина Stack usage error
из libxml2/libxslt/lxml?libxml: «Ошибка использования стека» - дополнительная информация?
ответ
Согласно @nwellnhof's answer, это связано с тем, что функция расширения зарегистрирована и называется меньшим количеством параметров, чем ожидалось.
В моем случае это произошло потому, что я проходил в содержимом узла, а в некоторых случаях этот узел был пуст. Раньше это было хорошо, но что-то в моей инструментальной цепочке изменилось и начало поднимать эту ошибку.
Мой исходный код выглядел что-то вроде:
<xsl:template match="foo">
<xsl:value-of select="my:func(.)" />
</xsl:template>
Когда foo
был пуст, был поднят «Stack ошибка использования», часто группируются с ошибкой «Незарегистрированная функции». Простое исправление было соответствовать только, когда было содержание в foo
, например:
<xsl:template match="foo[./*]">
<xsl:value-of select="my:func(.)" />
</xsl:template>
Кажется, что вы используете функции расширения lxml
. В этом случае «Ошибка использования стека» (XPATH_STACK_ERROR
внутри) происходит, когда значение стекается из стека XPath, и стек пуст. Типичным сценарием является функция расширения, называемая меньшим количеством параметров, чем ожидалось.
Да, я использую 'lxml'. Недавно я обновил библиотеку libxml2 и код, который работал неделю назад, теперь полностью прекратил работу с этой единственной ошибкой, где ранее могли быть подняты другие ошибки. –