使用 Python3,我以二进制模式重新打开了标准输出。之后,当我print("Hello")
告诉我需要使用类似字节的对象时。很公平,它现在处于二进制模式。
但是,当我这样做时:
print(b"Some bytes")
我仍然收到此错误:
TypeError: a bytes-like object is required, not 'str'
那是怎么回事?
使用 Python3,我以二进制模式重新打开了标准输出。之后,当我print("Hello")
告诉我需要使用类似字节的对象时。很公平,它现在处于二进制模式。
但是,当我这样做时:
print(b"Some bytes")
我仍然收到此错误:
TypeError: a bytes-like object is required, not 'str'
那是怎么回事?
print()
总是写str
值。它将首先将任何参数转换为字符串,包括字节对象。
从print()
文档中:
所有非关键字参数都像 dos 一样转换为字符串
str()
并写入流,由sep分隔,后跟end。
您不能print()
在二进制流上使用,句号。要么直接写入流(使用它的.write()
方法),要么将流包装在一个TextIOWrapper()
对象中以处理编码。
这些都有效:
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'))