TypeError:尝试遍历内循环时'int'对象不可迭代?
我不太确定我的循环结构有什么问题。可能是命名的问题,因为计数变量和子元素的名字用了同一个变量。希望能得到一些帮助。
from xml.etree import ElementTree as ET
root = ET.Element("painter")
root.set('version', '1.0')
linenum = 0
pointnum = 0
smpl_data = [[[20,40],(0,0,1,1)],[[10,50],(0,0,1,1)],[[78,89],(0,0,1,1)]]
while linenum <= len(smpl_data): #smpl_data change to self.lines
elem_line = ET.SubElement(root,"line" + str(linenum), attrib={"r": "1", "g": "2", "b": "3", "a": "4"})
elem_line.set("r", smpl_data[linenum][1][0])
print elem_line.attrib.get("r")
elem_line.set("g", smpl_data[linenum][1][1])
print elem_line.attrib.get("g")
elem_line.set("b", smpl_data[linenum][1][2])
print elem_line.attrib.get("b")
print elem_line.get("a")
elem_line.set("a", smpl_data[linenum][1][3])
print elem_line.attrib.get("a")
for pointnum in linenum:
elem_point = ET.SubElement("line" + str(linenum), "point" + str(pointnum), attrib={x: "10", y: "20"})
print elem_point
print elem_point.get("x")
elem_point.set("x", smpl_data[linenum][0][0])
print elem_point.attrib.get("x")
print elem_point.get("y")
elem_point.set("y", smpl_data[linenum][0][1])
print elem_point.attrib.get("y")
pointnum = pointnum + 1
linenum = linenum + 1
当我尝试开始遍历内部循环时,出现了错误,具体是在“for pointnum in linenum”这一行。不知道为什么会这样?
很抱歉没有说得更清楚。
这是完整的错误信息:
Traceback (most recent call last):
File "C:\Users\joel\Desktop\open-autism-software\software\asd\pen\writexml.py", line 57, in <module>
for pointnum in linenum:
TypeError: 'int' object is not iterable
我在整个程序中的目标是能够将所有特定的(x,y)点作为属性添加到它们各自的子元素(行)中。每一行都连接到主根节点。然而,(x,y)点的数量是可变的,因为每一行的长度可能不同。
这个XML文档应该看起来像这样:
<root>
<line r="0", g="0", b="1", a="1">
<point x="20" y="30">
<point x="10" y="15">
<point x="15" y="25">
...
</line>
<line r="0", g"1", b="1", a="1">
...
</line>
...
</root>
2 个回答
1
linenum
不能被遍历。很难看出你想要做什么,但也许你想要的是 for pointnum in smpl_data[linenum]:
这样写?
3
你可能想要的是
for pointnum in range(linenum):
也就是说,从零开始到比 linenum 小一的所有数字