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 に答える