即使发生错误,Python如何继续读取输出

时间:2021-03-24 01:49:13

标签: python arduino

我有一个函数可以读取存储在 Arduino 上的输出。输出如下所示:

['stopped','15.00','25.44','40.5','nan','off','off','on','50.00','yes','on','45']
['version1.0']
['3.0','0.1']

第一行包括不同地方的温度,我需要第四行。第二行没有意义,但我需要它的命令来保持设备运行。第三行是位置和力。 我需要不断向设备发送命令以保持加热器打开,否则如果在 10 秒内没有命令,设备将自动关闭。因此,我添加了一个命令

ser.write(b"y\n")

功能:

def read_output(ser, verbose=True):
    position = []
    force = []
    temp = []
    while ser.inWaiting() > 0:
        line = ser.readline().strip()
        line = ''.join(line.decode()[1:-1])
        line = line.split(' ')
        ser.write(b"y\n") #meaningless command print "version1.0"
        print(line)
        if verbose:
            print(line)
        if len(line) == 2:
            position += [float(line[0])]
            force += [float(line[1])]
        if len(line) == 12:
            temp += [float(line[3])]
            if int(float(line[3])) > 50 
               break
        time.sleep(0.001) # no busy-wait, reduce CPU
    return position, force, temp

我会按 p, f, temp = read_output(ser) 收集数据,最后保存在 csv 中。 代码有时会被错位的输出中断,并出现这样的错误

['version1.0<3.0','0.1']
ValueError: could not convert string to float: 'version1.0<3.0'

看起来第二行和第三行重叠了。我想这可能是因为 ['version1.0'] 和 position&force 输出 ['3.0','1.0'] 是同时打印出来的。

如果发生这种情况,我将无法获得输出。谁能帮我跳过这个错误并继续运行代码?

0 个答案:

没有答案