[Python-Dev] New-style exceptions (original) (raw)
Michael Hudson mwh at python.net
Thu Aug 5 15:27:57 CEST 2004
- Previous message: Except that! (was Re: [Python-Dev] Python in Unicode context)
- Next message: [Python-Dev] New-style exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Michael Hudson <mwh at python.net> writes:
(I have a hacky patch which makes exceptions new-style which I'll post in a moment).
Well, it turns out to be a bit big for attaching, so it's here:
http://starship.python.net/crew/mwh/hacks/new-style-exceptions-hacking.diff
This is very much a first cut; no attempt at subtlety. The procedure went roughly "Hack until it compiles, hack until it doesn't dump core immediately, hack until most tests pass."
The good news: all tests but test_pickletools pass (and that's doomed; just look at it).
The bad news: I've entirely broken raising old-style classes (well, not quite:
try: raise C ... except types.ClassType, c: print c ... main.C
) so I've had to make sure various classes used in the test suite inherit from exception.
There was a bunch of shallow breakage -- f'ex str(old-style-class) is quite different from str(new-style-class), which broke various output comparison tests (try not to gag when you see how I worked around this) -- but not much that's deep.
You can get a different kind of shallow breakage by essentially removing old-style classes (changing the default metatype to type), but then 'types.ClassType is type' and this from copy_reg.py:
def pickle(ob_type, pickle_function, constructor_ob=None): if type(ob_type) is _ClassType: raise TypeError("copy_reg is not intended for use with classes")
rather fails to do the right thing. I didn't pursue this one very far.
Obviously, a better attempt would be to allow raising any old-style class or instance or any subtype of Exception or any instance of a subtype of Exception -- but that becomes tedious to spell.
I suspect that it would be quite hard -- or at least prohibitively tedious -- to write code that worked with both old- and new-style exceptions, so I'm not sure a -N switch to turn them on would work. At least not without a small battery of helper functions that noone would bother to use.
I guess this means making exceptions new-style might have to wait for a Python 3.0-ish flag day of some kind.
Cheers, mwh
-- Roll on a game of competetive offence-taking. -- Dan Sheppard, ucam.chat
- Previous message: Except that! (was Re: [Python-Dev] Python in Unicode context)
- Next message: [Python-Dev] New-style exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]