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()
我正在尝试编写一个代码,以便从我的串行 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()