无法从while循环内的列表中提取元素

时间:2019-10-22 09:05:26

标签: python python-3.x list serial-port

当尝试创建一个简单的程序以从RS232设备读取数据时,我注意到我无法在while循环内访问列表中的元素。

此列表是从串行端口(使用pyserial)读取的字节。

import serial

ser = serial.Serial('COM5', baudrate=115200, timeout=1)
ser.flushInput()

#To request Distances & Echoes, the following frame has to be sent
packet = bytearray()
packet.append(0xde)
packet.append(0x01)
packet.append(0x05)
packet.append(0x59)
packet.append(0x83)


try:
    while 1:
        ser.write(packet)
        ser_bytes = ser.read(50)

        listDistances = list(ser_bytes)
        distance0_lsb = listDistances[4]  #distance 0 (LSB)
        distance0_msb = listDistances[5]  #distance 0 (MSB)

finally:
    ser.close()

listDistances [4]抛出“索引超出范围”错误

我是否需要线程才能在从列表中提取元素时不断更新列表?

1 个答案:

答案 0 :(得分:0)

Python列表索引以0开头,这意味着在您的示例listDistances[5]中,如果列表只有5个元素,则会引发“索引超出范围”。

如果您希望distance0_lsbdistance0_msb阅读listDistances中的最后两个元素,则可以使用:

distance0_lsb = listDistances[-2]
distance0_msb = listDistances[-1]

python中的负索引会向后遍历列表。