descriptor.FieldDescriptor(
name='etag', full_name='ResponseContext.etag', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=str("", "utf-8"),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
以上函数调用出现以下错误:
has_default_value=False, default_value=str("", "utf-8"), TypeError: decoding str is not supported
答案 0 :(得分:1)
这与调用descriptor.FieldDescriptor
无关。
请参阅str
的文档:
class str(object ='')
class str(object = b'',encoding =' utf-8',errors =' strict')
返回对象的字符串版本。如果未提供object,则返回空字符串。否则,str()的行为取决于是否给出编码或错误,如下所示。
如果既没有给出编码也没有给出错误,str(object)返回object .__ str __(),它是对象的“非正式”或可打印良好的字符串表示。对于字符串对象,这是字符串本身。如果object没有__str __()方法,则str()会返回到返回的repr(object)。
如果给出了至少一个编码或错误,对象应该是一个类字节对象(例如字节或字节数组)。在这种情况下,如果object是一个字节(或bytearray)对象,然后str(字节,编码,错误)相当于bytes.decode(编码,错误)。否则,在调用bytes.decode()之前获取缓冲区对象下的字节对象。有关缓冲区对象的信息,请参阅二进制序列类型 - 字节,字节数组,内存视图和缓冲区协议。
将没有encoding或errors参数的字节对象传递给str()属于第一种返回非正式字符串表示的情况(另请参阅Python的-b命令行选项)。例如:
由于str("", "utf-8")
,您收到错误。 ""
不是类似字节的对象。