0

如何修复此错误,pos_coordinates 包含一个值列表,而 updatePos_coordinates 是先前复制到 updatePos_coordinates 列表中的 pos_coordiantes 值。我想找出对象和索引值 8、9、12 和 13 之间的差异。但我不断收到此错误。我该如何解决这个问题

    screen_width = 0
    screen_height = 0
    updatePos_coordinates = []

    while True:
        client_socket.send("loc\n")
        data = client_socket.recv(8192)
        pos_coordinates = data.split()

        if(not(pos_coordinates[-1] == "eom" and pos_coordinates[0] == "start")):
            continue

        if (screen_width != int(pos_coordinates[2])):
            screen_width = int(pos_coordinates[2])
            screen_height = int(pos_coordinates[3])

        if (pos_coordinates != updatePos_coordinates):
            if(cmp(pos_coordinates[8:10], updatePos_coordinates[8:10]) == 0):
                both.brake()
                print "Ball is in the same location.."
            if((pos_coordinates[8] - updatePos_coordinates[8] > 5) or (pos_coordinates[8] - updatePos_coordinates[8] < -5) or (pos_coordinates[9] - updatePos_coordinates[9] > 5) or (pos_coordinates[9] - updatePos_coordinates[9] < -5)):     
                activateRobot(pos_coordinates)
            else:
                both.brake()
                print "Ball is in the same location.."

        updatePos_coordinates = pos_coordinates[:]
        time.sleep(3)
        print '...........'

我不断得到这个:

Traceback (most recent call last):
  File "test.py", line 155, in <module>
    if((pos_coordinates[8] - updatePos_coordinates[8] > 5) or (pos_coordinates[8] - updatePos_coordinates[8] < -5) or (pos_coordinates[9] - updatePos_coordinates[9] > 5) or (pos_coordinates[9] - updatePos_coordinates[9] < -5)):     
IndexError: list index out of range
4

1 回答 1

0

updatePos_coordinates[8]当它还没有任何元素时,您正在尝试访问,因为自从您将其定义为updatePos_coordinates = [].

updatePos_coordinates您应该在循环之前填充默认值。

例如:

updatePos_coordinates = ['' for _ in range(16)]
# replace 16 with length of pos_coordinates

或者,您可以在第一次通过循环时使两个坐标彼此相等。

if len(updatePos_coordinates) < 16:
    updatePos_coordinates = pos_coordinates[:]

elif pos_coordinates != updatePos_coordinates:
    ...

我还注意到,当坐标实际上是字符串时,您将坐标视为整数。

于 2012-10-03T03:27:35.347 回答