[Python-Dev] concerns regarding callable() method

Guido van Rossum guido at python.org
Sun Apr 8 17:39:30 CEST 2007

On 4/8/07, Paul Pogonyshev <pogonyshev at gmx.net> wrote:
> I have seen in PEP 3100 that callable() function is planned to be
> removed in Python 3000 with this replacement: "just call the object
> and catch the exception???".  For one, the object (if it is
> callable) can raise exception itself, so you need to somehow to
> differentiate between exception raised inside its __call__ and
> exception raised if object is not callable to begin with.


> Additionally consider something like
>         something.set_callback (x)
> Assume that set_callback() wants to check if `x' is callable at
> all, to raise exception early and make error tracking easier.
> Currently, you can
>         assert callable (x)
> But if callable() is removed, there is no apparent replacement.  Of
> course, you cannot call `x' since it might have side-effects or be
> slow etc.

assert hasattr(x, '__call__')

I note that callable() was introduced before all callable objects had
a __call__ attribute. This is no longer the case, so it's not needed.

> Please reconsider removal of callable() or provide an adequate
> replacement.

What if someone passes a callable that doesn't have the expected signature?

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list