TypeError:调用函数FieldDescriptor()时不支持解码str

时间:2017-12-20 04:18:27

标签: python

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

1 个答案:

答案 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"),您收到错误。 ""不是类似字节的对象。