Python 使用cElementTree传递attrib kwarg时不一致
根据说明,Python 使用cElementTree传递attrib kwarg时不一致,python,python-2.7,elementtree,Python,Python 2.7,Elementtree,根据说明,Element()的接口采用attrib关键字参数 class xml.etree.ElementTree.Element(tag, attrib={}, **extra) 下面将对此进行解释 现在,正如使用Python2.7和ElementTree所描述的,这对我来说是可行的。比如说 >>> import xml.etree.ElementTree as ET >>> parent = ET.Element("parent") >>&
Element()
的接口采用attrib
关键字参数
class xml.etree.ElementTree.Element(tag, attrib={}, **extra)
下面将对此进行解释
现在,正如使用Python2.7和ElementTree所描述的,这对我来说是可行的。比如说
>>> import xml.etree.ElementTree as ET
>>> parent = ET.Element("parent")
>>> attribs = {'age': '20', 'name': 'Steve'}
>>> child = ET.SubElement(parent, "child", attrib=attribs)
>>> ET.dump(parent)
<parent><child age="20" name="Steve" /></parent>
我错过了什么?有趣的是,如果我只是将attribs
字典作为位置参数传递,cElementTree代码就可以正常工作
>>> import xml.etree.cElementTree as ET
>>> parent = ET.Element("parent")
>>> attribs = {'age': '20', 'name': 'Steve'}
>>> child = ET.SubElement(parent, "child", attribs)
>>> ET.dump(parent)
<parent><child age="20" name="Steve" /></parent>
>将xml.etree.cElementTree作为ET导入
>>>父元素=等元素(“父元素”)
>>>attribs={'age':'20','name':'Steve'}
>>>child=ET.SubElement(父,“子”,属性)
>>>ET.dump(父级)
我发现了一个与此相关的解决方案,但它以一个不会修复的解决方案结束。为什么C实现的行为不同?有没有关于这方面的文件我错过了。谢谢这不是一个解决方案,而是相关的:它只是一个直接的实现差异,在Python 2.7中被列为一个bug,但在3.x中被认为是固定的。您发布的bug中的“无法修复”很可能纯粹是由于放弃了对Python2.5的支持。感谢链接Alok-这现在更有意义了,并确认它是2.7中的bug。
File "attrib.py", line 17, in <module>
ET.dump(parent)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1165, in dump
elem.write(sys.stdout)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 821, in write
serialize(write, self._root, encoding, qnames, namespaces)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 940, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 933, in _serialize_xml
v = _escape_attrib(v, encoding)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1093, in _escape_attrib
_raise_serialization_error(text)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1053, in _raise_serialization_error
"cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize {'age': '20', 'name': 'Steve'} (type dict)
>>> import xml.etree.cElementTree as ET
>>> parent = ET.Element("parent")
>>> attribs = {'age': '20', 'name': 'Steve'}
>>> child = ET.SubElement(parent, "child", attribs)
>>> ET.dump(parent)
<parent><child age="20" name="Steve" /></parent>