You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python写入XML文件触发IndexError: child index out of range问题求助

解决IndexError: child index out of range问题

嘿,这个问题其实一眼就能看穿——你不小心把自己的变量给覆盖啦!

错误原因分析

你一开始定义了name作为存储车辆信息的字典列表,但在循环内部生成XML元素的时候,写了这行代码:

name=SubElement(obj,'name')

这行代码直接把原来的name列表变量替换成了一个XML Element对象!第一次循环结束后,name已经不再是你最初定义的那个列表了,所以当第二次循环执行name1 = str(name[i]['vehicle'])时,你其实是在尝试对一个XML元素做列表索引和字典取值的操作,这完全不符合它的用法,自然就抛出了IndexError。

修复后的代码

只需要把XML元素的变量名改成和原列表不冲突的名字就行,比如改成obj_name,另外我还帮你修正了两个小细节:

import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
from xml.dom import minidom

# 把原列表变量名改成更清晰的vehicle_names,避免冲突
vehicle_names = [{'vehicle': 'honda'}, {'vehicle': 'hyundai'}, {'vehicle': 'mercedes'}, {'vehicle': 'rangerover'}, {'vehicle': 'bentley'}, {'vehicle': 'toyota'}, {'vehicle': 'mecerati'}, {'vehicle': 'lamborgini'}]
l = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (1, 2)]

# 你的l只有9个元素,原来的range(10)会触发另一个索引错误,改成range(9)
for step in range(9):  
    i,j = l[step]
    print(i,j)
    name1 = str(vehicle_names[i]['vehicle'])
    root = Element('annotation')
    folder = SubElement(root, 'folder')
    folder.text="testing"
    filename=SubElement(root, 'filename')
    filename.text="1.jpg"
    path=SubElement(root, 'path')
    path.text="path"
    source=SubElement(root, 'source')
    obj=SubElement(root, 'object')
    # 用obj_name代替name,避免覆盖原列表变量
    obj_name=SubElement(obj,'name')
    obj_name.text=str(name1)
    tree = ET.ElementTree(root)
    # 路径里的转义是多余的,直接用f-string生成文件名更简洁
    tree.write(os.path.join('testing',f"{step}.xml"))

额外小提示

  1. 变量命名尽量清晰,比如把原列表改成vehicle_names,能从根本上避免这类变量名冲突问题;
  2. 注意循环次数和列表长度匹配,你的l只有9个元素,range(10)会触发另一个索引越界错误;
  3. 文件名里不需要转义点号,直接用f"{step}.xml"就可以正常生成XML文件。

内容的提问来源于stack exchange,提问作者can I fix it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:10:58