Python 巨蟒:“;TypeError:“返回的非字符串”;但还是打印输出?

Python 巨蟒:“;TypeError:“返回的非字符串”;但还是打印输出?,python,Python,我有一段代码,它创建了一个新的便笺..当我尝试打印时,我得到了以下错误,即使它打印了输出 Error: C:\Python27\Basics\OOP\formytesting>python notebook.py Memo=This is my first memo, Tag=example Traceback (most recent call last): File "notebook.py", line 14, in <module> print(firstn

我有一段代码,它创建了一个新的便笺..当我尝试打印时,我得到了以下错误,即使它打印了输出

Error:
C:\Python27\Basics\OOP\formytesting>python notebook.py
Memo=This is my first memo, Tag=example
Traceback (most recent call last):
  File "notebook.py", line 14, in <module>
    print(firstnote)
TypeError: __str__ returned non-string (type NoneType)
方法应返回字符串,而不是打印

def __str__(self):
    return 'Memo={0}, Tag={1}'.format(self.memo, self.tags)

还可以使用str()环绕输出。我有同样的问题,因为我的模型有以下内容(作为一个简化的示例):

其中pressid是一个IntegerField类型的对象。Django(以及一般的python)需要一个字符串作为str函数,因此返回一个整数会导致抛出此错误

def __str__(self):
    return str(self.pressid)

这解决了我在Django管理层遇到的问题。希望它对您的帮助。

您面临的问题是: TypeError:str返回非字符串(类型NoneType)

在此,您必须了解str函数的工作原理: str功能虽然主要用于打印值,但实际上是用于返回字符串,而不是打印字符串。 在类中,str函数直接调用print,而print不返回任何内容,这就解释了错误输出。由于我们生成了格式化字符串,并且函数不返回任何内容,因此使用了None值。 这就是对你错误的解释

您可以使用返回instr函数解决此问题,如: *只需返回字符串值,而不是打印它

 class Summary(models.Model):
   book = models.ForeignKey(Book,on_delete = models.CASCADE)
   summary = models.TextField(max_length=600)

    def __str__(self):
        return self.summary
但如果返回的值不是字符串类型,则可以这样做,从str函数返回字符串值

*键入将值转换为str函数返回的字符串

class Summary(models.Model):
   book = models.ForeignKey(Book,on_delete = models.CASCADE)
   summary = models.TextField(max_length=600)

   def __str__(self):
       return str(self.summary)
            `
试试这个:

def __str__(self):
    return f'Memo={self.memo}, Tag={self.tags}'

在我的例子中,我也有同样的问题,因为我被返回了一个数字:

def __str__(self):
    return self.code
str正在等待一个str,而不是另一个str

现在,您可以很好地使用:

def __str__(self):
    return self.name
其中name是一个字符串。

我是Django的新手。 但我分享我的经验,因为我解决了同样的问题

我的情况是,有一天(没有内存)将某个字段(memo)的属性更改(添加)为null=True。但我完全忘记了我的model.py如下所示

def __str__(self):
    if self is not None:
        return self.author.memo

所以我编辑了其他字段的返回值。就这些。

这就是我需要的!如何保存此答案以供将来参考…>???没有理由在f字符串周围放置
str
构造函数(定义上,它已经是
str
)。这是真的,谢谢;)
def __str__(self):
    return self.name
def __str__(self):
    if self is not None:
        return self.author.memo