当尝试创建一个简单的程序以从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]抛出“索引超出范围”错误
我是否需要线程才能在从列表中提取元素时不断更新列表?
答案 0 :(得分:0)
Python列表索引以0开头,这意味着在您的示例listDistances[5]
中,如果列表只有5个元素,则会引发“索引超出范围”。
如果您希望distance0_lsb
和distance0_msb
阅读listDistances
中的最后两个元素,则可以使用:
distance0_lsb = listDistances[-2]
distance0_msb = listDistances[-1]
python中的负索引会向后遍历列表。