2012-08-08 10 views
26

Mam ten fragment kodu, który tworzy nowy note..WHen próbuję wydrukować pojawia się następujący błąd, mimo że drukuje wyświetlamyPython: "TypeError: __str__ zwrócił ciąg znaków", ale nadal drukuje na wyjściu?

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) 

Odpowiedz

53

Method __str__ powinien zwrócić ciąg, a nie drukować.

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

Możesz również otoczyć wyjście str(). Miałem ten sam problem, ponieważ mój model miał następujące (w uproszczonym przykładzie):

def __str__(self): 
    return self.pressid 

Gdzie pressid był typ obiektu IntegerField. Django (i python w ogóle) oczekuje ciągu znaków dla funkcji str, więc zwrócenie liczby całkowitej powoduje wygenerowanie tego błędu.

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

To rozwiązało problemy, które napotkałem po stronie zarządzania Django w domu. Mam nadzieję, że pomaga z twoją.

+0

Tego właśnie potrzebuję! Jak zapisać tę odpowiedź na przyszłość ...> ??? – flowera

Powiązane problemy