需要 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'

不知道如何解决这个问题

【问题讨论】:

将您的调试prints 移到 while 中,似乎在循环的第一次迭代中没有引发错误。 您是否在while 循环中修改mess?看起来是这样,否则它是一个无限循环。检查您分配给mess 的内容。 我的水晶球说你在while循环中有另一个ser.readline(),但你没有decode结果。 好吧,@tdelaney,你的水晶球是正确的。我忘记将解码添加到第二个readline,我看到它在while 上失败,并假设它永远不会超过那个。 虽然循环条件很难调试。调试器可让您检查每次迭代的变量,这很有帮助。 【参考方案1】:

@tdelaney 有一条评论导致了我的解决方案:

我的水晶球说你现在有另一个 ser.readline() 循环,但你不解码结果。

【讨论】:

以上是关于需要 Python 3.5 字节类对象的主要内容,如果未能解决你的问题,请参考以下文章

string - Python 3.5 需要写一个类似字节的对象,而不是'str'

Python异步编程4:协程函数,协程对象,await关键字

ASM字节码操作 转换已有的类 Type 类 介绍

jdk动态代理实现原理总结

java中类加载机制

Python 3.5类型提示动态生成的实例属性