2015-04-17 30 views
2

我與xml.etree.cElementTree工作,以及有關官方documentation - 希望找到元素Element類型錯誤:ITER()不帶任何關鍵字參數

$ 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 

我在這裏錯過什麼?

回答

3

這是一個已知的bug; C加速版本的API缺少支持tag參數作爲關鍵字參數。見issue #16849

Element.{get,iter} doesn't handle keyword arguments when using _elementtree C accelerator.

的錯誤是固定在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> 
+0

謝謝它是關於'從xml.etree進口cElementTree非常詳細的解答ET'。我將其更改爲'從xml.etree導入ElementTree作爲ET'。 –

相關問題