Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html lxml断言错误:元素代理无效_Html_Lxml - Fatal编程技术网

Html lxml断言错误:元素代理无效

Html lxml断言错误:元素代理无效,html,lxml,Html,Lxml,我在运行ZODB的实例中有一个会话,它解析一个页面,然后存储lxml对象。它随后抛出: AssertionError: invalid Element proxy at 4495778632 在我的特殊情况下,很难重现,但这段代码也做到了: from lxml import etree tree = etree.fromstring("<html><body>test</body></html>" , etree.HTMLParser()) c=

我在运行ZODB的实例中有一个会话,它解析一个页面,然后存储lxml对象。它随后抛出:

AssertionError: invalid Element proxy at 4495778632
在我的特殊情况下,很难重现,但这段代码也做到了:

from lxml import etree
tree = etree.fromstring("<html><body>test</body></html>" , etree.HTMLParser())
c=[ x for x in tree.iter() ][0]
print(c.__class__())    
从lxml导入etree
tree=etree.fromstring(“test”,etree.HTMLParser())
c=[x代表树中的x.iter()][0]
打印(c.\uuuuu类\uuuuuu())

发生了什么事?

当我试图对元素节点执行操作时,我得到了这个断言错误,我已将该元素节点作为参数传递给芹菜
@shared_task
.delay
调用。为了修复错误,而不是传入元素,我传入了xml\u字符串,并在
@shared\u任务中执行了一个新的
ET.fromstring(xml\u string)
。有了新的文档,所有的etree操作都运行良好。当元素进入芹菜队列时,一定与元素的序列化有关。

您的错误消息说不存在任何元素代理。代理表示节点的相应
C
表示,该表示缺失

使用
c.\uuuuu class()
尝试调用
\u元素的构造函数。lxml的文档说明:

知道lxml中的每个代理都有一个工厂是很重要的 正确设置C级成员的函数。代理对象必须 不得在该工厂外实例化。比如说 实例化_元素对象或其子类时,必须始终调用 其工厂功能:

cdef xmlNode* c_node
cdef _Document doc
cdef _Element element
...
element = _elementFactory(doc, c_node)
如果不使用工厂模式并传递c_节点,构造函数将因断言而失败:

lxml/src/lxml/apihelpers.pxi:

cdef inline int _assertValidNode(_Element element) except -1:
    assert element._c_node is not NULL, u"invalid Element proxy at %s" % id(element)