Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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
Python 使用cElementTree传递attrib kwarg时不一致_Python_Python 2.7_Elementtree - Fatal编程技术网

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>