Python:ValueError:无法将字符串转换为实时数据中的float

时间:2017-05-18 14:51:32

标签: python string pyqt type-conversion string-parsing

我想建立一个心电图。过滤器是用udoo构建的,然后我想在python中绘制信号。但是当我运行我的代码时它会继续这样做:

  

ValueError:无法将字符串转换为float。

 import serial
 import sys
 import time
 from pyqtgraph.Qt import QtGui, QtCore
 import numpy as np
 import pyqtgraph as pg


 # constants
 BAUDE_RATE = 9600
 ARDUINO_MAX_INT = 2 ** 10
 ARDUINO_MAX_VOLTAGE = 3.3
 WINDOW_SIZE = 30
 MAX_DATA_SIZE = 1024

 # declare the Window
 app = QtGui.QApplication([])
 win = pg.GraphicsWindow(title="Arduino Analog Plotter")
 win.resize(1000, 600)

 # initialize plots 
 raw_plot = win.addPlot(title="Raw Pin Data")
 raw_curve = raw_plot.plot(pen='y')
 raw_plot.addLegend()
 raw_plot.showGrid(True, True)
 raw_plot.setYRange(0, 1200)
 raw_plot.setXRange(0, 1024)

 # disable auto size of the x-y axis
 raw_plot.enableAutoRange('xy', False)
 raw_data = np.zeros(1024)
 # open serial
 ser = serial.Serial('COM10', 115200, timeout=1)
 line = pg.InfiniteLine(pos=1024, angle=0, pen=(24, 215, 248))
 raw_plot.addItem(line)

 ser.flushInput()
 def gettemp(ser):
     ser.write('t')
     ser.flush()
     return ser.readline().strip('\r').strip('\n').split(' ').pop(7)

 def update():
     global raw_data
     # open serial port
     raw_capture = []
     for x in range(WINDOW_SIZE):
         sensoroutput=gettemp()

         r=sensoroutput
         ser.readline().strip('\r').strip('\n').split(' ').pop(7)
         raw_capture.append(float(r).pop(7))

     raw_data = np.concatenate([raw_data, raw_capture])

     # remove first bin to make room for new bin

     if len(raw_data) > MAX_DATA_SIZE:
         raw_data = raw_data[WINDOW_SIZE:]

     # plot data
     raw_curve.setData(raw_data)


 def savecounter():
     ser.close()


 import atexit

 atexit.register(savecounter)
 timer = QtCore.QTimer()
 timer.timeout.connect(update)
 timer.start(0)
 ## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
     import sys

if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
    QtGui.QApplication.instance().exec_()

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您的sensoroutput似乎是一个字符串。 您无法使用float()直接转换它:

raw_capture.append(float(r).pop(7))

你能发布sensoroutput的输出吗?

答案 1 :(得分:0)

我只是在这里采取疯狂的刺,但通常如果你有\r\n的行结尾,\r首先出现\n排在第二位。您删除这些字符的方式,\r将保留,因为您在strip被删除之前先尝试\n; float()将在字符串中的非数字字符上失败。试试这个,它会同时删除两个行尾字符:

ser.readline().strip('\r\n').split(' ').pop(7)