[Tutor] Use __str__ method for int values

Steven D'Aprano steve at pearwood.info
Sun Mar 10 11:26:19 CET 2013


On 10/03/13 19:57, Vincent Balmori wrote:
> I am trying to use a __str__ method to display the values of attribute mood = self.hunger + self. boredom.
> When I try to execute I get this error:
>
> Traceback (most recent call last):
>    File "C:/Users/Vincent/Documents/Programming Tutorials/Python Programming for the Absolute Beginner - Project Files/source/chapter08/critter_caretaker_vpb3.py", line 105, in <module>
>      main()
>    File "C:/Users/Vincent/Documents/Programming Tutorials/Python Programming for the Absolute Beginner - Project Files/source/chapter08/critter_caretaker_vpb3.py", line 99, in main
>      print(crit)
> TypeError: __str__ returned non-string (type int)
>
>
> This is the code:

[snip code]

You haven't actually asked a question here, so I don't understand what is giving you trouble. I'll try to guess, but please pardon me if I guess wrongly.

Have you read the error message Python gives?

__str__ returned non-string (type int)

This tells you that if __str__ returns something which is not a string, Python will treat it as an error. To fix that, change your __str__ method to return a string. Use the str() function to convert a non-string value into a string.

Is the error message not clear enough? If not, can you suggest an improvement?


Your __str__ method looks like this:

>      def __str__(self):
>          mood = self.boredom + self.hunger
>          return mood

This is not a very good design for a __str__ function. str(some_critter) should return something that indicates to the reader that it is a Critter, not an integer. That is, something like one of these might be appropriate:

Critter(name="Fred", boredom=7, hunger=5)
<Critter object at 0xb7f744f0>
<frustrated Critter "Fred">

or similar, rather than:

12


which does not look like a Critter nor give the reader any hint at all that what they are seeing is a Critter.



-- 
Steven


More information about the Tutor mailing list