[Python-Dev] Dangerous exceptions (was Re: Another test_compiler
jhylton at gmail.com
Mon Sep 6 03:42:44 CEST 2004
On Sun, 5 Sep 2004 01:02:35 -0400, Tim Peters <tim.peters at gmail.com> wrote:
> I would like to see Python's exception hierarchy grow more
> sophisticated in this respect. MemoryError, SystemExit, and
> KeyboardInterrupt are things that should not be caught by "except
> Exception:", neither by a bare "except:", nor by hasattr() or C-level
> dict lookup. ZODB's ConflictError is another of that ilk. I'd like
> to see "except Exception:" become synonymous with bare "except:", and
> move the "dangerous exceptions" to subclass off a new branch of the
> exception hierarchy. It could be that something like your patch is
> the only practical way to make this work in the C implementation, so
> I'm keen on it.
The current exception hierarchy isn't too far from what you suggest.
We just got the names wrong. That is, there is a base class,
StandardException, that captures most exceptions other than
MemoryError, SystemError, and KeyboardInterrupt. If we renamed that
Exception, then we'd be 90% of the way there. You could also change
your code, right now, to say "except StandardError:" and avoid the
problem entirely. Make sure ConflictError does not inherit from
StandardError, of course. And make sure you're happy that ImportError
is not a StandardError either.
I'm not sure what I think of the change to "except:" It's often the
case that someone who has written "except:" really means "except
Something:", but I expect that very often Something != StandardError
and issubclass(Something, StandardError). In that case, the change
doesn't really help them. The code is still wrong.
More information about the Python-Dev