【问题标题】:Can't seem to break while loop properly. Comes up with an error message似乎无法正确打破 while 循环。出现错误消息
【发布时间】:2020-09-15 15:43:16
【问题描述】:

代码从 csv 获取数据并读取到没有数据的行 - 运行良好,但代码以错误结尾 - 中断无法正常工作?执行读取所有数据的必要功能,但当它应该是 len(row) == 0 的空行时,它似乎继续通过 while true 语句超过 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

【问题讨论】:

  • 你没有对len(row) > 0 的结果做任何事情。您可能认为那里有 if 声明,但没有!为什么不把底部的if 移到顶部呢?
  • 嗨,刚刚试过,我得到一个语法错误,箭头指向 len(row) > 0 行上的 0

标签: python while-loop break


【解决方案1】:

改变break条件的位置,改为:

    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.

【讨论】:

  • 嗨,感谢您的回答,但它似乎仍然贯穿到:'row = csvFileArray[rowValue] # row' 行并给出一个奇怪的错误
  • 你更新了while循环吗?如果您使用 'while len(row) > 0:',请在循环之前将 row 设置为非零数。
  • 如将行设置为整数?
  • 不,设置为单元素数组。
  • '列表索引超出范围'
【解决方案2】:

第二行len(row)&gt;0 是一个多余的语句,没有做任何事情。

我认为,当您的程序运行到代码的第三行(即row = csvFileArray[rowValue])上没有条目的行时,它会继续将此空行分配给row,并尝试访问超过0 的row 的索引以下行,它给出了错误。

尝试移动最后一个

    if len(row) == 0:
        break

row = csvFileArray[rowValue] # row 之后的行,以便在您尝试访问索引之前立即检查其长度。

【讨论】:

  • 嗨,谢谢你的回答,但它似乎仍然贯穿到:'row = csvFileArray[rowValue] # row' 行并给出一个奇怪的错误
  • 能否给出错误信息的堆栈跟踪?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 2023-01-22
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多