Python可以重命名xml.etree.ElementTree文件.iter()用于2.6向后兼容?

2024-10-01 13:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,它将在具有python2.6或python2.7的机器上运行。脚本解析并循环通过已安装.xml像这样:

tree = ET.parse('installed.xml')
root = tree.getroot()
for package in root.iter('package'):

        if 'foo' in package.attrib['id'].lower():
            for property in package.iter('property'):
                if 'cic.info.version' in property.attrib['name']:
                    version = property.attrib['value']

这在2.7上运行良好,但在2.6中,我得到了错误-\u ElementInterface实例没有属性'iter' 我发现在2.6中,这个方法被称为“getiterator”,所以我想知道是否有一种方法可以为这个方法分配一个别名,类似这样的。。你知道吗

if cur_python < req_python:
    xml.etree.ElementTree.iter() = xml.etree.ElementTree.getiterator()

我试了一些我在这里发现的东西,但还没能让任何东西起作用。任何帮助都将不胜感激!你知道吗


Tags: 方法in脚本treepackageforifversion
1条回答
网友
1楼 · 发布于 2024-10-01 13:29:29

您可以这样做,但必须为每个实例创建赋值:

root = tree.getroot()
if cur_python < req_python:
    root.iter = root.getiterator

(注意没有括号,我们不想调用函数,而是定义一个名称)。对package执行相同的操作。你知道吗

或定义一个返回正确函数的包装函数:

def compat_iter(obj):
    return (obj.getiterator if cur_python < req_python else obj.iter) 

你可以这样使用:

for package in compat_iter(root)('package'):
...
  for property in compat_iter(package)('property'):

相关问题 更多 >