我正试图靠岸 https://github.com/thearn/Python-Arduino-Command-API到python3,到目前为止,我已经将它导入到可以无错误地导入它的地步,我尝试运行blink示例found here,但总是得到一个类型错误。在
我想我已经把范围缩小到这个范围了。在
PySerial 2.7 for python2.7.8中的readline函数返回字符串,PySerial 2.7中python3.3的readline函数返回字节。在
Python2
>>> import serial
>>> serial.VERSION
'2.7'
>>> ser= serial.Serial(port='COM4')
>>> ser.readline()
'0\r\n'
>>> type(ser.readline())
<type 'str'>
Python3
^{pr2}$我已经检查了pyserial的python2和python3实现的readline函数的源代码,它们似乎都应该返回字节,因为每个字节的最后一行是return bytes(line)
,这是整个函数中唯一的返回语句。在
我的问题:为什么pyserial2.7的readline函数在python2和python3中返回不同的结果?在
在Python3中执行套接字程序时,我遇到了这个问题。当我接收到一个流时,我最终使用了decode()函数使其正常工作。在
retval = sock.recv(1024).decode()
解码很有帮助。不确定它是否适用于你的情况,但试试看。在
这是Python2和3之间的主要区别之一。在
来自https://docs.python.org/3.0/whatsnew/3.0.html:
您可以在上面链接的“文本与数据而不是Unicode与8位”部分找到完整的解释。在
这是因为在python3.x中,文本始终是Unicode,并用str类型表示,而二进制数据则由bytes类型表示。这个特性不同于python2.x版本。在
在您的示例中,
ser.readline()
实际上返回二进制数据。在相关问题 更多 >
编程相关推荐