можно только объединить список (не "байты") в список - PullRequest
0 голосов
/ 18 января 2019

Когда я пытаюсь запустить этот код, он выдает ошибку:

line = line + device.readBuffer()
TypeError: can only concatenate list (not "bytes") to list 

Я гуглил и обнаружил, что для python 3 нужно добавить b "" при попытке конвертировать байты в str. После изменения, как сказано, этот скрипт запускается в течение нескольких секунд, а затем вылетает, выдавая ту же ошибку.

код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import serial
import re
import datetime

class EM408GPS:
    def __init__(self, serialport, baudratespeed):
        self.gpsdevice = serial.Serial(port=serialport, baudrate=baudratespeed, timeout=5)      
        self.init()
    def init(self):       
        if self.isOpen():
            return True      
        return False
    def open(self):
        self.gpsdevice.open()       
    def isOpen(self):
        print("hey")
        return self.gpsdevice.isOpen()  
    def readBuffer(self):
        try:
            data = self.gpsdevice.read(1)
            n = self.gpsdevice.inWaiting()
            if n:
                data = data + self.gpsdevice.read(n)
            return data

        except Exception as e:
            print("Big time read error, what happened: ", e)
            sys.exit(1)

def main():
    device = EM408GPS("COM9", 9600)
    newdata = b""
    line = b""
    while device.isOpen():
        if newdata: 
            line = newdata
            newdata = b""  

        line = line + device.readBuffer()

        if re.search(b"\r\n", line):
            data = line.split(b"\r\n")
            newdata = line.split(b"\r\n")
            #data, newdata = line.split(b"\r\n")

            print ("----" + str(datetime.datetime.now()) + "----")
            print (data)
            print (newdata)

            line = b""
main()

Любая помощь будет оценена

1 Ответ

0 голосов
/ 18 января 2019

, если re.search(b"\r\n", line) - Истина, тогда вы разделяете строку, которая возвращает тип (newdata) = список. Затем вы назначаете line = newdata и пытаетесь объединить

line[?] = line[list] + device.readBuffer()[bytes]
...