尝试访问特定列表项时列表索引超出范围

时间:2014-05-12 10:27:10

标签: python

我对Python很陌生,无法弄清楚为什么这个简单的代码无效:

我有一个字符串(来自我的websocket客户端的handposition/506.83047/388.1101/703.2166消息),/作为分隔符,并希望将其拆分为一个列表:

coordinates = msg.split('/')

我可以打印列表:

print(coordinates)

得到这个:

['handposition', '495.0279', '443.24762', '976.6502']

一切正常,直到我尝试使用以下命令访问列表中的第二个元素:

print(coordinates[1])

我收到此错误消息:

File "mouse_server.py", line 19, in onMessage
  print(coordinates[2])
  exceptions.IndexError: list index out of range

print(coordinates[1])怎么了?

更新1

以下是完整代码:

from autobahn.twisted.websocket import WebSocketClientProtocol, \
                                       WebSocketClientFactory
from pymouse import PyMouse

mo = PyMouse()

class MyClientProtocol(WebSocketClientProtocol):

    def onConnect(self, response):
        print("Server connected: {0}".format(response.peer))

    def onOpen(self):
        print("WebSocket connection open.")

    def onMessage(self, msg, isBinary):
        coordinates = msg.split('/')
        print(coordinates)
        print(coordinates[1])

    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))


if __name__ == '__main__':

    import sys

    from twisted.python import log
    from twisted.internet import reactor

    log.startLogging(sys.stdout)

    factory = WebSocketClientFactory("ws://localhost:4343", debug = False)
    factory.protocol = MyClientProtocol

    reactor.connectTCP("127.0.0.1", 4343, factory)
    reactor.run()

2 个答案:

答案 0 :(得分:2)

最有可能的是,如果你在一堆行上运行它,可能有一个输入行没有所有预期的字段。您可以在访问该元素之前打印整个列表,并查看异常之前出现的最后一个。

答案 1 :(得分:-1)

我个人会把它放到一个2D数组中,这反过来会更容易打印出列表/数组的某些部分而不是全部。

Simple2D = [['A4 Notepad','1.99'],['Clear pencil case small','0.99'],['Clear pencil case large','1.50']]

打印单独会更方便,但要打印所有的 -

for i in range(len(items)):
    for j in range(len(items[i])):
        print(items[i][j])

更改变量......