为python 3.9删除getchildren

2024-06-16 17:42:15 发布

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

我读到以下内容: “自3.2版以来已弃用,将在3.9版:使用列表(elem)或迭代中删除。”(https://docs.python.org/3.8/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.getchildren

我的代码适用于python 3.8及以下版本:

tree = ET.parse("....xml")
root = tree.getroot()
getID= (root.getchildren()[0].attrib['ID'])

然而,当我尝试为Python3.9更新它时,我无法

tree = ET.parse("....xml")
root = tree.getroot()
getID= (root.list(elem)[0].attrib['ID'])

我得到以下错误 AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'list'


Tags: idtreeparserootxmlelementlistet
2条回答

该错误指示您应该写入以下内容:

getID = list(root)[0].attrib['ID']

调用listroot元素上迭代,给出其子元素,同时将其转换为可以索引的列表

“使用list(elem)或迭代”字面意思是list(root),而不是root.list()。以下工作将起作用:

getID = list(root)[0].attrib['ID']

您可以将任何iterable包装在一个列表中,并且弃用说明特别告诉您root是iterable。由于只为一个元素分配列表效率很低,因此可以获取迭代器并从中提取第一个元素:

getID = next(iter(root)).attrib['ID']

这是一个更紧凑的表示法

for child in root:
    getID = child.attrib['ID']
    break

主要区别在于,当没有子变量时(直接由next引发错误,而尝试访问不存在的getID变量时则会引发错误)

相关问题 更多 >