我有一段代码可以创建一个新的音符。当我尝试打印时,我得到以下错误,即使它打印输出:
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)
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)
9条答案
按热度按时间o4tp2gmn1#
方法__str__应该返回string,而不是print。
qij5mzcb2#
您还可以使用str()包围输出。我遇到了同样的问题,因为我的模型有以下内容(作为一个简化的例子):
其中pressid是IntegerField类型对象。Django(和一般的Python)期望一个str函数的字符串,所以返回一个整数会导致这个错误被抛出。
这解决了我在Django管理方面遇到的问题。希望对你有帮助。
kxeu7u2r3#
您面临的问题是:类型错误:str返回非字符串(类型为NoneType)
在这里,你必须理解str函数的工作原理:str函数,虽然主要用于打印值,但实际上是为了返回一个字符串,而不是打印一个。在你的类中,str函数直接调用print,而它没有返回任何东西,这解释了你的错误输出。因为我们的格式化字符串是构建的,并且因为我们的函数没有返回任何东西,所以使用None值。这是对你的错误的解释
你可以通过在str函数中使用return来解决这个问题,比如:* 只是返回字符串值而不是打印它
但是如果你返回的值不是字符串类型,那么你可以这样做,从你的str函数返回字符串值
r1zk6ea14#
在Model的
__str__
方法中,您将返回一个值null
。例如:
错误显示。
正确的
__str__
方法为:evrscar25#
我有同样的问题,在我的情况下,是因为我返回了一个数字:
String正在等待一个字符串,而不是另一个字符串。
现在工作良好:
其中name是一个字符串。
6ju8rftf6#
试试这个:
jbose2ul7#
我是Django的新手。但我分享我的经验,因为解决了同样的案件。
我的情况是,Someday(没有内存)将某个字段(memo)的属性更改(添加)为null=True。但我完全忘记了我的model.py如下。
所以我编辑了返回值到其他字段。就这样
y1aodyip8#
你的表中可能有一些空值。进入mysql并删除表中的空值。
6pp0gazn9#
我在Django Admin中得到了同样的错误:
TypeError:str返回非字符串(类型为NoneType)
当我定义
name
字段接受None
值时,如下所示,然后我在Django Admin中保存了一个None
值:因此,我将
self.name
替换为str(self.name)
,如下所示,然后错误就解决了: