需要 Python 3.5 字节类对象
Posted
技术标签:
【中文标题】需要 Python 3.5 字节类对象【英文标题】:Python 3.5 bytes-like object is required 【发布时间】:2015-11-18 16:41:13 【问题描述】:我有一个代码部分使用 pyserial 从外部设备获取输出。无论我如何解码readline()
输出,它都会引发错误。我首先测试每个条件,但在 while
中使用时会出错。
mess = ser.readline().decode().strip("\r\n")
print(mess)
print(mess != "")
print("Off" not in mess)
print(mess is not None)
while mess != "" and "Off" not in mess:
if "Google" in mess:
#code
让我回复:
On
True
True
True
Traceback (most recent call last):
File "main.py", line 57, in <module>
main()
File "main.py", line 38, in main
while mess != "" and "Off" not in mess:
TypeError: a bytes-like object is required, not 'str'
不知道如何解决这个问题
【问题讨论】:
将您的调试print
s 移到 while 中,似乎在循环的第一次迭代中没有引发错误。
您是否在while
循环中修改mess
?看起来是这样,否则它是一个无限循环。检查您分配给mess
的内容。
我的水晶球说你在while
循环中有另一个ser.readline()
,但你没有decode
结果。
好吧,@tdelaney,你的水晶球是正确的。我忘记将解码添加到第二个readline
,我看到它在while
上失败,并假设它永远不会超过那个。
虽然循环条件很难调试。调试器可让您检查每次迭代的变量,这很有帮助。
【参考方案1】:
@tdelaney 有一条评论导致了我的解决方案:
我的水晶球说你现在有另一个 ser.readline() 循环,但你不解码结果。
【讨论】:
以上是关于需要 Python 3.5 字节类对象的主要内容,如果未能解决你的问题,请参考以下文章
string - Python 3.5 需要写一个类似字节的对象,而不是'str'