[Python-Dev] Exception and ABCs / issue #12029

Guido van Rossum guido at python.org
Fri May 11 18:38:34 CEST 2012


Thanks for bringing this up. I've added my opinion to the tracker
issue -- I think it's a bug and should be fixed. We should have a
uniform way of checking for issubclass/isinstance.

--Guido

On Fri, May 11, 2012 at 3:33 AM, George-Cristian Bîrzan
<gcbirzan at gmail.com> wrote:
> As per http://bugs.python.org/issue12029 , ABC registration cannot be
> used for exceptions. This was introduced in a commit that fixed a
> recursion limit problem back in 2008
> (http://hg.python.org/cpython/rev/d6e86a96f9b3/#l8.10). This was later
> fixed in a different way and improved upon in the 2.x branch in
> http://hg.python.org/cpython/rev/7e86fa255fc2 and
> http://hg.python.org/cpython/rev/57de1ad15c54 respectively.
>
> Applying the fix from the 2.x branch for doesn't make any tests fail,
> and it fixes the problem described in the bug report. There are,
> however, two questions about this:
>
> * Is this a feature, or a bug? I would say that it's a bug, but even
> if it's not, it has to be documented, since one generally assumes that
> it will work.
> * Even so, is it worth fixing, considering the limited use cases for
> it? This slows exception type checking 3 times. I added a new test to
> pybench:
>
> before:
>       TryRaiseExceptClass:     25ms     25ms    0.39us    0.216ms
> after:
>       TryRaiseExceptException:     31ms     31ms    0.48us    0.214ms
>
> However, that doesn't tell the whole story, since there's overhead
> from raising the exception. In order to find out how much actually
> checking slows down the checking, I ran three timeits, with the
> following code:
>
> 1)
> try: raise ValueError()
> except NameError: pass
> except NameError: pass
> except ValueError: pass
>
> 2)
> try: raise ValueError()
> except NameError: pass
> except ValueError: pass
>
> 3)
> try: raise ValueError()
> except ValueError: pass
>
> Times are in ms:
>       before      after
> 1       528.69      825.38
> 2       473.73      653.39
> 3       416.29      496.80
> avgdiff  56.23      164.29
>
> The numbers don't change significantly for more exception tests.
>
> --
> George-Cristian Bîrzan
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org



-- 
--Guido van Rossum (python.org/~guido)


More information about the Python-Dev mailing list