像对象这样的字节是必需的,而在python 3 parsegps(str)中不是字符串

时间:2019-02-12 18:57:25

标签: python-3.x raspberry-pi gps serial-port nmea

am试图编写一个可以从我的串行UART读取数据并使用pynmea2模块解析NMEA gps语句的代码 我在python 2中运行此代码,并且就像魔术一样工作,当我尝试使用python3运行该类型错误时,我正在使用python idle在我的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 :(得分:0)

在Python 3.x中,文本始终为Unicode,并由str类型表示,而二进制数据则由字节类型表示。 serial.readline()实际上返回二进制数据,因此返回字节类型。这与Python 2.x不同。

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

str = serailPort.readline().decode()