首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError: python拆分函数的列表索引超出范围错误

IndexError: python拆分函数的列表索引超出范围错误
EN

Stack Overflow用户
提问于 2020-08-08 16:50:01
回答 2查看 563关注 0票数 0

嘿,伙计们,我正在通过Arduino向我的树莓派发送测压传感器数据。Arduino将数据以块的形式发送到串行,如下所示:

代码语言:javascript
运行
复制
0,0  
2,3  
5,6  
0,0 

所以我想要做的是使用split函数和下面的python代码将左边的读数从右边的读数中分离出来:

代码语言:javascript
运行
复制
import serial
ser = serial.Serial('/dev/ttyACM0',9600)

while True:
   
    read_serial=ser.readline()
    x = read_serial
    y = x.split(",")
    left = y[0]
    right = y[1]
    print(left)
    print(' ')
    print(right)

我得到以下错误:

代码语言:javascript
运行
复制
File "arduino_communication.py", line 10, in <module>
    right = y[1]
IndexError: list index out of range

当我注释掉这一行,也注释掉了right = y[1]时,我得到了左侧称重元件的正确读数。所以我有点不确定为什么我不能得到正确的称重单元(它已经被拆分到一个数组的位置1)

EN

回答 2

Stack Overflow用户

发布于 2020-08-08 17:02:41

可能串行数据没有逗号或空字符串。拆分前打印x。

如果有时串行数据没有逗号或空字符串,请使用try/except。

代码语言:javascript
运行
复制
try:
   y = x.split(",")
   left = y[0]
   right = y[1]
except IndexError:
   right = 0(or use the other value)
票数 0
EN

Stack Overflow用户

发布于 2020-10-01 02:31:14

我认为问题在于您的python脚本试图读取序列行的速度比arduino写入值的速度要快,这意味着有时python脚本会将序列作为空字符串读取,就像这样:'‘。

如果您将所有代码放在try/block中,则只有当arduino实际写入了一些值时,代码才会运行。

希望这能对你有所帮助:

代码语言:javascript
运行
复制
while True:
    try:
        read_serial=ser.readline()
        x = read_serial
        y = x.split(",")
        left = y[0]
        right = y[1]
        print(left)
        print(' ')
        print(right)
    except Exception as e:
        raise
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63313470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档