lines + = line / TypeError:无法将str连接为字节

时间:2019-05-31 00:28:19

标签: python arduino pyserial

我需要将保存在microSD上的arduino数据传递到GUI的sqlite数据库。除了能够解决此错误的人之外,您还能帮助我将数据传递到数据库吗?

lines=b''

with serial.Serial('COM5',9600,timeout=2) as ser:
    line = ser.readline()
    line = line.decode("utf-8")
    lines+=line

2 个答案:

答案 0 :(得分:1)

您上面发布的代码与错误不符。应该是

lines += line而不是lines += lines

代码中的

linestr对象,并且lines被定义为byte

因此,您可以执行以下操作: lines += bytes(line, 'utf-8')摆脱错误。

或者您不能只在线调用decode并将其保留为字节。

答案 1 :(得分:1)

我假设您使用的是Python 3(在您的问题中指定此信息是一种很好的做法)。

我还假定lines+=lines是写问题时引入的错字,而您的程序使用lines+=line

read()的pySerial文档说它返回字节,所以readline()也可能返回字节。当您执行line.decode("utf-8")时,您将使用从设备获取的字节字符串来创建文本字符串。然后,您尝试将line(类型str)追加到lines(类型bytes,因为您使用字节串文字b''创建了它)导致错误。

您应该可以通过以下方式解决此问题:

  1. lines创建为文本字符串(lines = ''
  2. 在将line附加到lines之前不对其进行解码

选择哪种信息可能取决于设备提供的信息是否实际上是文本信息,并保证在解码步骤不会失败,或者它实际上是二进制信息,是否需要稍后在程序中进行解析。