Python - 可以重命名 xml.etree.ElementTree.iter() 以实现 2.6 向后兼容吗?
Python - Possible to rename xml.etree.ElementTree.iter() for 2.6 backward compatibility?
我正在编写一个脚本,它将在 python 2.6 或 python 2.7 的机器上运行 运行。该脚本像这样解析并循环遍历 installed.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 中我得到错误 - _ElementInterface 实例没有属性 'iter'
我发现在 2.6 中该方法被称为 'getiterator',所以我想知道是否有办法为该方法分配一个别名,就像这样..
if cur_python < req_python:
xml.etree.ElementTree.iter() = xml.etree.ElementTree.getiterator()
我尝试了一些在这里找到的东西,但还没有任何效果。任何帮助将不胜感激!
你可以这样做,但你必须为每个实例创建分配:
root = tree.getroot()
if cur_python < req_python:
root.iter = root.getiterator
(注意没有括号,我们不想调用函数而是定义一个名字)。对 package
.
做同样的事情
或者定义一个包装函数,其中 returns 正确的函数:
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'):
我正在编写一个脚本,它将在 python 2.6 或 python 2.7 的机器上运行 运行。该脚本像这样解析并循环遍历 installed.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 中我得到错误 - _ElementInterface 实例没有属性 'iter' 我发现在 2.6 中该方法被称为 'getiterator',所以我想知道是否有办法为该方法分配一个别名,就像这样..
if cur_python < req_python:
xml.etree.ElementTree.iter() = xml.etree.ElementTree.getiterator()
我尝试了一些在这里找到的东西,但还没有任何效果。任何帮助将不胜感激!
你可以这样做,但你必须为每个实例创建分配:
root = tree.getroot()
if cur_python < req_python:
root.iter = root.getiterator
(注意没有括号,我们不想调用函数而是定义一个名字)。对 package
.
或者定义一个包装函数,其中 returns 正确的函数:
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'):