Py serial readline не работает в Python3 - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть следующий код, работающий в Python 2.7:

import serial, io
import pynmea2


ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
while True:
    reading = ser.readline()
    if reading.find('GGA') > 0:
        msg = pynmea2.parse(reading)
        print "Lat: %s " % (msg.lat)

Но тот же код здесь не работает в Python3:

import serial, io
import pynmea2


ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
while True:
    reading = ser.readline()
    if reading.find('GGA') > 0:
        msg = pynmea2.parse(reading)
        print("Lat: %s " % (msg.lat))

Сообщение об ошибке:

if reading.find ('GGA')> 0: TypeError: аргумент должен быть целочисленным или байтовоподобным объектом, а не 'str'

Как получить кодработает в Python3

1 Ответ

1 голос
/ 29 сентября 2019

В питоне 3 тип строки был отделен от последовательности байтов.Это означает, что 'GGA' является строковым литералом, а reading является последовательностью байтов.Есть несколько способов решить эту проблему.
Первый.Преобразуйте reading в строку, вызвав reading = reading.decode() (вам нужно знать, какая там кодировка).
Второе.Преобразуйте ваш литерал в байты либо с помощью 'GGA'.encode(), либо создав байтовый литерал b'GGA'.

...