【问题标题】:"a bytes-like object is required" but I am using bytes“需要一个类似字节的对象”但我正在使用字节
【发布时间】:2017-11-16 11:06:58
【问题描述】:

使用 Python3,我以二进制模式重新打开了标准输出。之后,当我 print("Hello") 它告诉我需要使用类似字节的对象时。很公平,它现在处于二进制模式。

但是当我这样做时:

print(b"Some bytes")

仍然收到此错误:

TypeError: a bytes-like object is required, not 'str'

这是怎么回事?

【问题讨论】:

    标签: python python-3.x printing bytesio


    【解决方案1】:

    print() 总是 写入str 值。它会首先将任何参数转换为字符串,包括字节对象。

    来自print() documentation

    所有非关键字参数都会像str()一样转换为字符串并写入流,由sep分隔,后跟end

    你不能在二进制流上使用print(),句号。要么直接写入流(使用 .write() 方法),要么将流包装在 TextIOWrapper() object 中以处理编码。

    这两个都有效:

    import sys
    
    sys.stdout.write(b'Some bytes\n')  # note, manual newline added
    

    from io import TextIOWrapper
    import sys
    
    print('Some text', file=TextIOWrapper(sys.stdout, encoding='utf8'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-21
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多