[Python-Dev] PEP, take 2: Exception Reorganization for Python 3.0
Ron Adam
rrr at ronadam.com
Wed Aug 3 18:33:31 CEST 2005
Nick Coghlan wrote:
> Phillip J. Eby wrote:
>
>>+1. The main things that need fixing, IMO, are the need for critical and
>>control flow exceptions to be distinguished from "normal" errors. The rest
>>is mostly too abstract for me to care about in 2.x.
>
>
> I guess, before we figure out "where would we like to go?", we really need to
> know "what's wrong with where we are right now?"
>
> Like you, the only real problem I have with the current hierarchy is that
> "except Exception:" is just as bad as a bare except in terms of catching
> exceptions it shouldn't (like SystemExit). I find everything else about the
> hierarchy is pretty workable (mainly because it *is* fairly flat - if I want
> to catch a couple of different exception types, which is fairly rare, I can
> just list them).
More often than not, 9 out 10 times, when ever I use "except Exception:"
or a bare except:, what I am doing is the equivalent to:
try:
<statement that may fail> # will either fail or not
except:
pass
else:
<dependent statements>
Usually I end up using "if hasattr():" or some other way to pre test the
statement if possible as I find "except: pass" to be ugly. And putting
both the statement that may fail together with the depending statements
in the try:, catches too much. Finding subtle errors hidden by a try
block can be rather difficult at times.
Could inverse exceptions be an option? Exceptions don't work this way
so it would probably need to be sugar for "except <exception>:pass; else:".
Possibly?
try:
<statement that may fail>
except not <a_exception>: "except None:" as an option?
<dependent statements>
Ok, this isn't exactly clear, and probably a -2 for several reasons.
The exception tree organization should also take into account inverse
relationships as well. Exceptions used for control flow are often of
the type "if not exception: do something".
Cheers,
Ron
More information about the Python-Dev
mailing list