[Python-Dev] concerns regarding callable() method (original) (raw)

skip at pobox.com skip at pobox.com
Mon Apr 9 04:53:09 CEST 2007


Guido> My point is that it's futile to use callable() -- even if it
Guido> passes, you have no assurance that you actually have a valid
Guido> callback. So why bother with it at all? It's counter to the
Guido> spirit of Python. If someone passes you a bad callback, they will
Guido> see a traceback when you call it. Then they fix their
Guido> program. That's how it's supposed to work.

There's one place where I find the traceback somewhat unhelpful. Consider calling a method of a class with incorrect arguments:

>>> class C:
...   def __init__(self):
...     pass
... 
>>> C(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 1 argument (2 given)

While in this example it's clear what method wasn't called correctly, a callback called with the wrong number of arguments yields a fairly useless stack trace. I'm thinking in particular of callbacks called from C code (e.g. Gtk signal handlers). I think it would be helpful to check to see if the function being called had an "im_class" attribute. If so, then resolve the class name and include it in the TypeError message:

TypeError: C.__init__() takes exactly 1 argument (2 given)

Skip



More information about the Python-Dev mailing list