Django 异常\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

Django 异常\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,django,python-3.x,Django,Python 3.x,尝试执行以下方法,其中我得到异常,如exception\uuuu str\uuuuuuuu返回的非字符串(类型字节)。 def __unicode__(self): return u"{}{:02d}:{:02d}:{:05.2f}".format( '-' if self.sign == -1 else '', self._deghour, self.minute, self.second) def __str__(self): return unicode(

尝试执行以下方法,其中我得到异常,如exception\uuuu str\uuuuuuuu返回的非字符串(类型字节)。

def __unicode__(self):
    return u"{}{:02d}:{:02d}:{:05.2f}".format(
        '-' if self.sign == -1 else '', self._deghour, self.minute, self.second)

def __str__(self):
    return unicode(self).encode('utf-8')

def __repr__(self):
    return u"RADecBase('{0}')".format(self)

您对unicode与字节、编码与解码感到困惑

编码将(unicode)字符串转换为字节。但是
\uuu str\uu
方法必须返回字符串,而不是字节。没有必要在那里编码

def __str__(self):
    return unicode(self)
然而,我甚至不知道这是如何工作的,因为Python3没有定义
unicode
内置,也不识别
\uuuuuUnicode\uuuu
方法。您应该直接在
中执行此操作:

def __str__(self):
    return "{}{:02d}:{:02d}:{:05.2f}".format(
        '-' if self.sign == -1 else '', self._deghour, self.minute, self.second)

在实现
\uuuu str\uuuu
魔术方法时,必须返回一个字符串(因此会出现错误,因为您返回的是utf-8编码的字符串)。因此,如果您想以这种方式重载它,您需要执行类似于
返回str(unicode(self).encode('utf-8'))