Barry Warsaw wrote:
Unless this new proposal also includes changing the meaning of "except:" to "except Error".
It's worth debating. OT1H, it's a semantic different for Python 2.x (although +1 on the idea for Py3K).
I was speaking of Py3K here, yes.
Going along with that, maybe the interpreter should do something different when an Exception that's not an Error reaches the top (e.g. not print a traceback if KeyboardInterrupt is seen -- we usually just catch that, print "Interrupted" and exit).
SystemExit is already special-cased, as far as I can tell. KeyboardInterrupt could be in fact be special cased as well (I saw many Python newbies -- but otherwise experienced -- being disgusted at first when they interrupt their code with CTRL+C: they expect the program to exit "almost silently").
Also, under this new proposal, we could even remove Exception from the builtins namespace in Py3k. It's almost always wrong to use it, and if you really really need it, it's spelled exceptions.Exception.
I'm not sure I'd go as far as hiding Exception, since I don't think the penalty is that great and it makes it easier to document.
The situation (in Py3k) I was thinking is when people see this code:
except: # something
and want to change it so to get a name to the exception object. I *think* many could get confused and write:
except Exception, e: # something
which changes the meaning. It "sounds" correct, but it's wrong. Of course, it's easy to argue that "Exception" is just that, and people actually meant "Error". In a way, the current PEP352 is superior here because it makes harder to do the "bad" thing by giving it a complex name (BaseException).