TypeError:iter()不带关键字参数

时间:2015-04-17 09:46:07

标签: python xml elementtree

我正在使用xml.etree.cElementTree,关于官方documentation - 想要Element中的find元素:

$ python --version
Python 2.7.8

我的剧本:

#!/usr/bin/env python

import os, re

import xml.etree.ElementTree as ET

XML_FILE = '/cygdrive/****.csproj'

try:
    tree = ET.ElementTree(file=XML_FILE)
    root = tree.getroot()

    print type(root)

    for item in root.iter(tag='OutputPath'):
        print item.tag, item.attrib, item.text
    ....

但是当我运行它时 - 出错:

$ ./xm_par.py
<type 'Element'>
Traceback (most recent call last):
  File "./xm_par.py", line 21, in <module>
    for item in root.iter(tag='OutputPath'):
TypeError: iter() takes no keyword arguments

我在这里想念的是什么?

1 个答案:

答案 0 :(得分:3)

这是一个已知的错误; API的C加速版本缺少对tag参数作为关键字参数的支持。见issue #16849

  

Element。{get,iter}在使用_elementtree C加速器时不会处理关键字参数。

该错误已在Python 3.3及更高版本中修复,但尚未在Python 2.7中修复。

您可以省略关键字并将参数作为位置传递:

for item in root.iter('OutputPath'):

演示:

>>> import xml.etree.cElementTree as ET
>>> tree = ET.fromstring('''\
... <root>
...     <OutputPath></OutputPath>
... </root>
... ''')
>>> tree.iter(tag='OutputPath')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: iter() takes no keyword arguments
>>> tree.iter('OutputPath')
<generator object iter at 0x1045cc5a0>