This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年09月25日 12:06 by kirpit, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (5) | |||
|---|---|---|---|
| msg171255 - (view) | Author: (kirpit) | Date: 2012年09月25日 12:06 | |
xml.etree.ElementTree.Element's append method doesn't support iterator/sequence parameters as it's supposed to, for the version 1.3.0.
Python 2.7.3 (default, Sep 14 2012, 09:52:31)
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import xml.etree.ElementTree as et
>>> et.VERSION
'1.3.0'
>>> root = et.Element('root')
>>> sublist = [et.Element('sub'), et.Element('sub')]
>>> root.append(sublist)
>>> et.tostring(root)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1127, in tostring
ElementTree(element).write(file, encoding, method=method)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 818, in write
self._root, encoding, default_namespace
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 878, in _namespaces
for elem in iterate():
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 477, in iter
for e in e.iter(tag):
AttributeError: 'list' object has no attribute 'iter'
>>> root = et.Element('root')
>>> root.append(iter(sublist))
>>> et.tostring(root)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1127, in tostring
ElementTree(element).write(file, encoding, method=method)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 818, in write
self._root, encoding, default_namespace
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 878, in _namespaces
for elem in iterate():
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 477, in iter
for e in e.iter(tag):
AttributeError: 'listiterator' object has no attribute 'iter'
|
|||
| msg171256 - (view) | Author: Ronald Oussoren (ronaldoussoren) * (Python committer) | Date: 2012年09月25日 12:13 | |
(unassigning as this is not a mac-specific issue) BTW. Is this really a bug, the documentation says that append appends a single element <http://docs.python.org/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.append>: <quote> append(subelement) Adds the element subelement to the end of this elements internal list of subelements. </quote> |
|||
| msg171260 - (view) | Author: (kirpit) | Date: 2012年09月25日 12:44 | |
well, i've just followed the source code regardless to documentation so you may be right about appending a single element. (kind of newbie around here.) but then, append method is misbehaving about asserting the parameter, isn't it? |
|||
| msg171261 - (view) | Author: Ronald Oussoren (ronaldoussoren) * (Python committer) | Date: 2012年09月25日 12:51 | |
Use the extend method to add multiple elements. Both the source and documentation indicate that 'append' is used for appending a single item and 'extend' for appending multiple items (just like with list). IMHO this is not a bug. As an aside: when you import xml.etree.cElementTree you get a faster implementation of the same interface, and this (C-based) implementation does validate arguments. |
|||
| msg172880 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年10月14日 13:09 | |
Closing, since this isn't a bug and append's behavior is properly documented. Regarding the error message, yes it could probably be better but you would need to enable input validation for that. Since Python is duck typed, often when arguments are not validated you get less-than-good error messages if things go wrong. In this case, append expect something Element-like that would have an "iter" method, and complains when that's not found. In 3.3 this whole thing was improved by always validating arguments in append/extend etc. and raising a TypeError when something is wrong. I don't think there's good enough reason to change this in 2.7 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:36 | admin | set | github: 60248 |
| 2012年10月14日 13:09:02 | eli.bendersky | set | status: open -> closed messages: + msg172880 stage: resolved |
| 2012年09月26日 13:11:38 | ezio.melotti | set | nosy:
+ ezio.melotti, eli.bendersky |
| 2012年09月25日 12:51:06 | ronaldoussoren | set | resolution: not a bug messages: + msg171261 |
| 2012年09月25日 12:44:08 | kirpit | set | messages: + msg171260 |
| 2012年09月25日 12:13:17 | ronaldoussoren | set | assignee: ronaldoussoren -> nobody messages: + msg171256 nosy: + nobody |
| 2012年09月25日 12:06:04 | kirpit | create | |