“需要一个类似字节的对象”,但我使用的是字节

时间:2017-11-16 11:06:59

标签: python python-3.x printing bytesio

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

然而,当我这样做时:

print(b"Some bytes")

仍然收到此错误:

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

这是怎么回事?

1 个答案:

答案 0 :(得分:4)

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'))