【发布时间】:2013-11-15 16:10:13
【问题描述】:
来自 libxml2/libxslt/lxml 的 Stack usage error 的原因是什么?
【问题讨论】:
标签: python lxml libxml2 libxslt
来自 libxml2/libxslt/lxml 的 Stack usage error 的原因是什么?
【问题讨论】:
标签: python lxml libxml2 libxslt
您似乎正在使用lxml 扩展函数。在这种情况下,“堆栈使用错误”(XPATH_STACK_ERROR 内部)发生在从 XPath 堆栈中弹出一个值并且堆栈为空时。典型的场景是使用比预期更少的参数调用的扩展函数。
【讨论】:
lxml。我最近升级了 libxml2 库,一周前工作的代码现在完全停止处理这个以前可能引发其他错误的单一错误。
根据@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>
【讨论】: