требуется байтоподобный объект, а не строка в python 3 parsegps (str) - PullRequest
0 голосов
/ 12 февраля 2019

я пытаюсь написать код, который хорошо читает данные из моего серийного UART и анализирует предложение NMEA GPS с помощью модуля pynmea2. Я выполнял этот код на python 2, и он работал как по волшебству, когда я пытался запустить его с python3 aошибка типа повышения Я использую Python простоя, чтобы написать код в моем Raspberry Pi 3, и все оборудование между Neo 6m GPS и Raspberry в порядке, мой код взорван `

import serial
import pynmea2

def parseGPS(str):

    if str.find('GGA') > 0:
        msg = pynmea2.parse(str)
        #print "Timestamp: %s -- Lat: %s %s -- Lon: %s %s -- Altitude: %s %s" % (msg.timestamp,msg.lat,msg.lat_dir,msg.lon,msg.lon_dir,msg.altitude,msg.altitude_units)

serialPort = serial.Serial("/dev/ttyS0", 9600, timeout=0.5)

while True:
    str = serialPort.readline()
    parseGPS(str)

`

и я получаю этот мессаг

 "if str.find('GGA').0:
    TypeError:'a bytes-like object is required, not 'str' "

1 Ответ

0 голосов
/ 13 февраля 2019

В Python 3.x текст всегда является Unicode и представлен типом str, а двоичные данные представлены типом байтов.serial.readline () фактически возвращает двоичные данные и, следовательно, в байтах.Это отличается от Python 2.x.

Вы можете преобразовать закодированные байтовые данные в строку с помощью:

str = serailPort.readline().decode()
...