TypeError: объект 'int' не повторяется, когда я пытаюсь выполнить итерацию по своему внутреннему циклу? - PullRequest
0 голосов
/ 14 июня 2011

Я не уверен, в чем проблема с моей структурой цикла.Возможно, это проблема именования, поскольку переменная count и имена SubElement используют одну и ту же переменную.Любая помощь приветствуется.

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

Я правильно понимаю ошибку, когда она пытается начать итерацию по внутреннему циклу, для pointnum в 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 ]

3 голосов
/ 14 июня 2011

Вы, вероятно, хотите

for pointnum in range(linenum):

То есть все числа от нуля до единицы меньше белья

1 голос
/ 14 июня 2011

linenum не повторяется.Трудно сказать, что вы пытаетесь сделать здесь, но, возможно, for pointnum in smpl_data[linenum]: будет тем, что вы хотите?

...