Не могу сломаться, пока l oop правильно. Выдает сообщение об ошибке - PullRequest
0 голосов
/ 28 мая 2020

Код берет данные из csv и читает до строки без данных - работает хорошо, но код завершается ошибкой - break не работает должным образом? Выполняет необходимую функцию чтения всех данных, но, кажется, продолжается через оператор while true после len (row)> 0, когда это должна быть пустая строка, где len (row) == 0 - есть идеи, как остановить сообщение об ошибке? Функциональность хорошая, но сообщение об ошибке явно раздражает.

while True:  
    len(row) > 0
    row = csvFileArray[rowValue]  # row 
    x, y, z, l, m, n, p, q, r = row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]

    x = float(x)
    y = float(y)
    z = float(z)
    l = float(l)
    m = float(m)
    n = float(n)
    p = float(p)
    q = float(q)
    r = float(r)

    y_axis = Vector((l, m, n))
    z_axis = Vector((p, q, r))

    x_axis = y_axis.cross(z_axis).normalized()

    M = Matrix((x_axis, y_axis, z_axis)).transposed()

    M = M.to_4x4()

    M.translation = scale * Vector((x, y, z))

    #test
    print(M)
    print(x_axis, y_axis, z_axis)
    bpy.ops.object.empty_add()
    mt = context.object
    mt.empty_display_type = 'ARROWS'
    mt.matrix_world = M

    rowValue = rowValue + 1

    if len(row) == 0:
        break

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вторая строка len(row)>0 - это избыточный оператор, который ничего не делает.

Я думаю, когда ваша программа запускается в строке без записи в третьей строке вашего кода, т.е. row = csvFileArray[rowValue], она продолжает назначьте эту пустую строку на row и попытайтесь получить доступ к индексам row за пределами 0 в следующей строке, что дает ошибку.

Попробуйте переместить последнюю

    if len(row) == 0:
        break

в строку после row = csvFileArray[rowValue] # row, поэтому его длина проверяется непосредственно перед попыткой доступа к индексам.

0 голосов
/ 29 мая 2020

Измените положение условия разрыва и измените его на:

    if len(row) == 0:
        break

на

    if len(row) <= 0:
        break

Отредактированный код:

while True:

    row = csvFileArray[rowValue]  # row 
    if len(row) <= 0:
        break
    x, y, z, l, m, n, p, q, r = row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]

    x = float(x)
    y = float(y)
    z = float(z)
    l = float(l)
    m = float(m)
    n = float(n)
    p = float(p)
    q = float(q)
    r = float(r)

    y_axis = Vector((l, m, n))
    z_axis = Vector((p, q, r))

    x_axis = y_axis.cross(z_axis).normalized()

    M = Matrix((x_axis, y_axis, z_axis)).transposed()

    M = M.to_4x4()

    M.translation = scale * Vector((x, y, z))

    #test
    print(M)
    print(x_axis, y_axis, z_axis)
    bpy.ops.object.empty_add()
    mt = context.object
    mt.empty_display_type = 'ARROWS'
    mt.matrix_world = M

    rowValue = rowValue + 1
    # Printing the row variable might help in figuring out the error.
...