lines + = line / TypeError: невозможно преобразовать str в байты - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно передать данные arduino, сохраненные на microSD, в базу данных sqlite моего графического интерфейса.Кто-нибудь, кроме возможности исправить эту ошибку, не могли бы вы помочь мне передать данные в базу данных?

lines=b''

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

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Я предполагаю, что вы используете Python 3 (рекомендуется указывать эту информацию в своем вопросе).

Кроме того, я предполагаю, что lines+=lines является опечаткой, введенной при написании вопроса и вашей программы.использует lines+=line.

Документы pySerial для read() говорят, что он возвращает байты, поэтому вполне вероятно, что readline() также возвращает байты.Когда вы делаете line.decode("utf-8"), вы используете строку байтов, полученную с устройства, для создания текстовой строки.Затем вы пытаетесь добавить line (тип str) к lines (введите bytes, поскольку вы создали его с литералом байтовой строки b''), и это вызывает ошибку.

Вы можете решить эту проблему:

  1. , создав lines в виде текстовой строки (lines = '')
  2. без декодирования line перед добавлением его к lines

То, что вы выберете, вероятно, зависит от того, является ли информация, предоставленная устройством, на самом деле текстовой и гарантированно не сбоит на этапе декодирования, или она на самом деле является двоичной и ее нужно будет проанализировать позже впрограмма.

1 голос
/ 31 мая 2019

Код, который вы разместили выше, не соответствует ошибке. Должно быть

lines += line, а не lines += lines

line в вашем коде - это объект str, а lines определяется как byte.

Так что вы можете сделать это вместо этого: lines += bytes(line, 'utf-8') чтобы избавиться от ошибки.

Или вы можете просто не вызывать decode и хранить его в байтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...