我写过的模块与测试数据文件一起工作得很好,但对flickrapi的实时数据完全不知情。
经过几天的挫折之后(看,我有很多无事可做!)我想我发现了问题,但我不知道修复它的问题。<type 'str'>
<type 'str'>
## opening&amp;
阅读外部XML <class
'xml.etree.ElementTree.Element'>
除了模块中的这一点,我使用了客观化。 Objectify解析<type 'str'>
就好了,但 不会 读取etree元素。我想我需要转换类&#39; xml.etree.ElementTree.Element&#39;到str(),但尚未怀疑它。
我从objectify.fromstring()得到的错误是:
Traceback (most recent call last):
File "C:\Mirc\Python\Temp Files\test_lxml_2.py", line 101, in <module>
Grp = objectify.fromstring(flickr.groups_getInfo(group_id=gid))
File "lxml.objectify.pyx", line 1791, in lxml.objectify.fromstring (src\lxml\lxml.objectify.c:20904)
File "lxml.etree.pyx", line 2994, in lxml.etree.fromstring (src\lxml\lxml.etree.c:63296)
File "parser.pxi", line 1614, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:93607)
ValueError: can only parse strings
在老板再次松开那些该死的飞猴之前请帮忙!!!
import fileinput
from lxml import html, etree, objectify
import re
import time
import flickrapi
if '@N' in gid:
try:
if tst:
Grp = objectify.fromstring(test_data)
else:
Grp = objectify.fromstring(flickr.groups_getInfo(group_id=gid))
fErr = ''
mn = Grp.xpath(u'//group')[0].attrib
res = Grp.xpath(u'//restrictions')[0].attrib
root = Grp.group
gNSID = gid
gAlias = ""
err_tst = getattr(root, "not-there", "Error OK")
gName = getattr(root, "name", "")
Images = getattr(root, 'pool_count', (-1))
Mbr = getattr(root, "members", (-1))
答案 0 :(得分:3)
解决方案是在调用objectify api之前停止将实时数据转换为xml.etree.ElementTree.Element
个对象。
如果这是不可能的(我怀疑),您可以使用lxml.etree.tostring
将xml渲染回文本表示,然后将其传递给etree.objectify.fromstring
。
答案 1 :(得分:1)
我认为传递给 objectify.fromstring 的“test_data”是String IO的实体,所以你必须首先阅读它然后客观化:
objectify.fromstring(test_data.read())