Python pH计代码报错:无法将字符串转换为浮点数的解决求助
解决pH计GUI串口数据解析崩溃问题
问题根源
- 代码执行顺序错误:原代码先尝试将字节串分割转换为float,之后才解码,完全颠倒了处理流程——串口读取的
line是字节串,不能直接分割转float。 - 未过滤无效数据:串口返回的行中包含非数值内容(比如
Read),直接转换会触发ValueError。 - 编码处理不完善:未处理解码失败的情况,导致换编码后仍报错。
修改后的代码
def updateFigs(self): line = self.ser.readline() # 读取串口字节数据 if not line: return # 空行直接返回 # 先解码字节串为字符串,优先用utf-8,解码失败则用latin-1兼容所有字节 try: line_str = line.decode("utf-8").strip() except UnicodeDecodeError: line_str = line.decode("latin-1").strip() # 过滤包含非数据标识的行(比如'Read') if 'Read' in line_str: return # 尝试分割并转换为float,捕获转换失败异常 try: self.data = [float(val) for val in line_str.split()] except ValueError: return # 转换失败直接跳过该行 # 确保数据为4个数值后再更新GUI if len(self.data) == 4: self.temp_lcd.display(self.data[0]) self.temp_plot.y = np.append(self.temp_plot.y, self.data[0]) self.temp_plot.y = np.delete(self.temp_plot.y, 0) self.temp_plot.li.set_ydata(self.temp_plot.y) self.temp_plot.axes.set_ylim(min(self.temp_plot.y)-1, max(self.temp_plot.y)+1) self.temp_plot.draw()
关键修改说明
- 调整解码顺序:先将字节串解码为字符串,再处理数据,这是串口数据处理的正确流程。
- 编码容错处理:当utf-8解码失败时,用
latin-1解码(它能兼容所有字节,不会抛出解码错误)。 - 过滤无效行:直接跳过包含
Read的行,避免非数据内容触发转换错误。 - 异常捕获:转换float失败时直接跳过该行,保证程序不会崩溃,GUI能持续运行。
- 简化冗余操作:
self.data[0]已经是float类型,无需重复转换。
内容的提问来源于stack exchange,提问作者Olivia Clay
相关产品推荐
相关产品推荐

