我有这段代码创建一个新的笔记..我尝试打印我得到以下错误,即使它打印输出
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)
Run Code Online (Sandbox Code Playgroud)
note.py
import datetime
class Note:
def __init__(self, memo, tags):
self.memo = memo
self.tags = tags
self.creation_date = datetime.date.today()
def __str__(self):
print('Memo={0}, Tag={1}').format(self.memo, self.tags)
if __name__ == "__main__":
firstnote = Note('This is my first memo','example')
print(firstnote)
Run Code Online (Sandbox Code Playgroud)
Fed*_*lev 73
方法__str__应该返回字符串,而不是打印.
def __str__(self):
return 'Memo={0}, Tag={1}'.format(self.memo, self.tags)
Run Code Online (Sandbox Code Playgroud)
小智 31
您也可以使用str()包围输出.我遇到了同样的问题,因为我的模型有以下内容(作为简化示例):
def __str__(self):
return self.pressid
Run Code Online (Sandbox Code Playgroud)
其中pressid是IntegerField类型的对象.Django(以及一般的python)需要str函数的字符串,因此返回一个整数会导致抛出此错误.
def __str__(self):
return str(self.pressid)
Run Code Online (Sandbox Code Playgroud)
这解决了我在Django管理方面遇到的问题.希望它对你的帮助.
小智 6
您面临的问题是:TypeError:str返回了非字符串(类型NoneType)
在这里,你必须了解STR功能的工作:在STR温控功能,但主要是用来打印值,但实际上是被设计成返回一个字符串,不打印之一。在您的类中,str函数在不返回任何内容时直接调用print,这解释了您的错误输出。由于构建了格式化的字符串,并且由于函数未返回任何内容,因此使用None值。这是您的错误的解释
您可以通过使用str中的return 函数来解决此问题,例如:*仅将字符串值returnig而不是打印它
class Summary(models.Model):
book = models.ForeignKey(Book,on_delete = models.CASCADE)
summary = models.TextField(max_length=600)
def __str__(self):
return self.summary
Run Code Online (Sandbox Code Playgroud)
但是,如果您要返回的值不是字符串类型,那么您可以像这样从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)
`
Run Code Online (Sandbox Code Playgroud)