Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t从while循环中的列表中提取元素_Python_Python 3.x_List_Serial Port - Fatal编程技术网

Python Can';t从while循环中的列表中提取元素

Python Can';t从while循环中的列表中提取元素,python,python-3.x,list,serial-port,Python,Python 3.x,List,Serial Port,在尝试创建一个简单的程序来从RS232设备读取数据时,我注意到我无法访问While循环中列表中的元素 此列表是从串行端口读取的字节(使用pyserial) 导入序列号 ser=串行。串行('COM5',波特率=115200,超时=1) flushInput爵士() #要请求距离和回波,必须发送以下帧 数据包=字节数组() packet.append(0xde) packet.append(0x01) packet.append(0x05) packet.append(0x59) packet.a

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

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

导入序列号
ser=串行。串行('COM5',波特率=115200,超时=1)
flushInput爵士()
#要请求距离和回波,必须发送以下帧
数据包=字节数组()
packet.append(0xde)
packet.append(0x01)
packet.append(0x05)
packet.append(0x59)
packet.append(0x83)
尝试:
而1:
序列写入(数据包)
ser_字节=ser.read(50)
listDistances=列表(ser_字节)
距离0_lsb=列表距离[4]#距离0(lsb)
距离0_msb=列表距离[5]#距离0(msb)
最后:
塞尔克洛斯()
listDistances[4]抛出“索引超出范围”错误


我需要线程在从列表中提取元素的同时不断更新列表吗?

Python列表索引从0开始,这意味着在您的示例中,
listDistances[5]
将在列表只有5个元素时引发“索引超出范围”

如果希望
distance0_lsb
distance0_msb
读取
列表距离中的最后两个元素,可以使用:

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

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

您是否尝试过在while循环之外访问
listDistances
?当你打印整个列表时,你会得到什么?(在while循环的内部和外部打印)在检查
listdestications=list(ser_bytes)
的结果之前,为什么假设需要线程?另外,我建议导入
time
并在循环中使用
sleep
,而不是敲打设备。我可以打印整个列表,所有元素都在那里(int)。如果在循环之外访问listDistances[x],则不会得到任何错误。但我需要不断更新这些元素…它们不可能都在那里<代码>索引器不是Python的谎言。您需要将其包装在一个
try
/
中,但
除外,并捕获抛出索引错误的响应。在异常情况下,打印值。如果我尝试对列表进行切片,我可以访问它,例如:distance0_lsb=listDistances[4:5]。这成功地创建了一个包含一个元素的新列表,但我确实需要将该元素作为一个整数,以便能够使用它进行一些计算。我理解,这里的问题不是我访问一个不存在的元素本身。当我打印列表时,我可以看到所有50个元素“listDistances[4]抛出一个”索引超出范围“错误”。请注意,该索引比他们尝试访问的下一个索引小1。所以这不可能是一个一个接一个的错误,因为他们打算访问更高的指标。对不起,我想我当时误解了你的问题。你能举一个不依赖于串行连接的例子,以便其他人更容易运行它吗?可能使用
bytes(50)
而不是
ser.read(50)
。不过,如果这样做行得通,你的问题可能就出在连续剧本身。请注意,例如,在超时的情况下,可以返回少于50个字节。