libxml:“堆栈使用错误” - 更多信息?

时间:2013-11-15 16:10:13

标签: python lxml libxml2 libxslt

来自libxml2 / libxslt / lxml的Stack usage error是什么原因?

2 个答案:

答案 0 :(得分:1)

您似乎正在使用lxml扩展功能。在这种情况下,"堆栈使用错误" (XPATH_STACK_ERROR内部)当从XPath堆栈中弹出一个值并且堆栈为空时发生。典型情况是使用比预期更少的参数调用扩展函数。

答案 1 :(得分:0)

根据@nwellnhof's answer,这源于扩展函数已注册并调用的参数少于预期的事实。

在我的情况下,这是因为我传入了一个节点的内容,在某些情况下,该节点是空的。以前这很好,但我的工具链中的某些内容已经改变并开始引发此错误。

我原来的代码看起来像是:

<xsl:template match="foo">
  <xsl:value-of select="my:func(.)" />
</xsl:template>

foo为空时,引发了“堆栈使用错误”,通常与“未注册的函数”错误组合在一起。简单的解决方法是仅在foo内有内容时进行匹配,例如:

<xsl:template match="foo[./*]">
  <xsl:value-of select="my:func(.)" />
</xsl:template>