【问题标题】:Python : ValueError: could not convert string to float in real time dataPython:ValueError:无法将字符串转换为实时浮点数据
【发布时间】:2017-05-18 14:51:31
【问题描述】:

我想建立一个心电图。过滤器内置在 udoo 中,然后我想在 python 中绘制信号。但是,当我运行我的代码时,它不断得到这个:

ValueError: 无法将字符串转换为浮点数。

 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_()

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

【问题讨论】:

  • 你在哪一行得到错误?
  • 请发布您收到的确切堆栈跟踪/错误。该堆栈跟踪将告诉您遇到问题的代码行。

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


【解决方案1】:

您的传感器输出似乎是一个字符串。 你不能直接用float()转换它:

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

你能发布sensoroutput的输出是什么吗?

【讨论】:

    【解决方案2】:

    我只是在这里猛烈抨击,但通常如果你同时拥有\r\n 作为行尾,\r 排在第一位,\n 排在第二位。您剥离这些字符的方式,\r 将保留,因为您先尝试strip,然后再删除\nfloat() 将在字符串中的非数字字符上失败。试试这个,它会同时删除两个行尾字符:

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

    【讨论】:

    • 它得到不同的错误。它变成这样: Traceback(最近一次调用最后一次):文件“plot_serial.py”,第 48 行,更新 sensoroutput=gettemp()
    • @AhmadNurianto 仅仅因为我指出了您的程序的一个问题并不意味着没有其他问题......
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多