TypeErrors

rdmurray at bitdance.com rdmurray at bitdance.com
Sat Feb 28 21:07:44 CET 2009


Sean Novick <daddysean23 at yahoo.com> wrote:
> First lookup:
> Traceback (most recent call last):
> 	 File "F:\CSC113 Module 4 CA\sample database.py", line 72, in <module>
> 			 class phonedb:
> 	 File "F:\CSC113 Module 4 CA\sample database.py", line 146, in phonedb
> 			 for entry in foo.lookup('reifsch'):
> 	 File "F:\CSC113 Module 4 CA\sample database.py", line 101, in lookup
> 			 if cmp(e, string) =3D=3D 0:
> TypeError: comparison did not return an int
>
> I do not know what this error means. I tried to look it up in help, but to no
> avail. If someone could please help or tell me where I could find an answer.
> Thanks.

The 'cmp' function (which is depricated, by the way) asks the two
arguments to compare themselves.  It does this by invoking the __cmp__
method on the first object, passing it the second.  (Actually it's more
complicated than that, but it will do as a partial explanation for now).
The __cmp__ method is expected to return an integer, which represents
the results of doing the comparison (see the docs if you want to know
the values...but as I said cmp and __cmp__ a depricated).

So, whatever 'e' is (and we can't tell from the traceback, you'll have
to work through your code to figure it out, probably by sprinkling in
'print' statements), its __cmp__ method didn't return an integer.

When you fix this, I would recommend converting to using rich comparisons
(__eq__, __lt__), etc, since __cmp__ is eventually going away (it doesn't
exist in Python 3.x).

--RDM




More information about the Python-list mailing list