2012-08-08 76 views
26

我有這段代碼創建一個新的note..WHen我嘗試打印我碰到下面的錯誤,即使它打印輸出Python:「TypeError:__str__返回非字符串」,但仍然打印輸出?

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) 

回答

53

方法__str__應該返回字符串,而不是打印。

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

你也可以用str()包圍輸出。我有同樣的問題,因爲我的模型有如下(以一個簡單的例子):

def __str__(self): 
    return self.pressid 

凡pressid是一個IntegerField類型的對象。 Django(和一般的python)期望使用一個字符串作爲函數,所以返回一個整數會導致這個錯誤被拋出。

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

這解決了我在Django管理方面遇到的問題。希望它對你有幫助。

+0

這就是我需要的!如何保存這個答案以供將來參考...>? – flowera 2018-01-04 18:30:11

相關問題