python 3 parsegps(str) 中需要一个类似对象的字节而不是字符串

a byte like object is required not string in python 3 parsegps(str)

我正在尝试编写一个代码,以便从我的串行 UART 读取数据并使用 pynmea2 模块解析 NMEA gps 语句 我在 python 2 中 运行 宁此代码并且它像魔术一样工作,当我尝试 运行 它与 python3 类型错误上升我使用 python 空闲时在我的树莓派 3 中编写代码,neo 6m gps 和树莓派之间的所有硬件都很好,我的代码很糟糕 `

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' "

在Python3.x中,文本总是Unicode,用str类型表示,二进制数据用bytes类型表示。 serial.readline() 实际上是 returns 二进制数据,因此是字节类型。这不同于 Python 2.x.

您可以使用以下方法将编码字节数据转换为 str:

str = serailPort.readline().decode()