replacing built-in exception types
Nishkar Grover
Nishkar.Grover at pdi.dreamworks.com
Tue Dec 11 21:29:17 EST 2007
I'm trying to replace the built-in base exception class with a subclass
of itself in python 2.5 because we can no longer add attributes to that...
% python2.4 -c 'import exceptions; exceptions.Exception.bar = 1234'
% python2.5 -c 'import exceptions; exceptions.Exception.bar = 1234'
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type
'exceptions.Exception'
% python2.5 -c 'import exceptions; exceptions.BaseException.bar = 1234'
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type
'exceptions.BaseException'
I already have a way to programatically construct the hierarchy of
subclasses, so for example, my subclass of OSError is a subclass of the
built-in OSError and a subclass of my subclass of EnvironmentError. The
only thing left to do is find a way to replace the built-in exception
types with my custom ones.
- Nishkar
Calvin Spealman wrote:
>
> Why would you do this? How to do it, if its even possible, is far less
> important than if you should even attempt it in the first place.
>
>
> On Dec 11, 2007, at 3:51 PM, Nishkar Grover wrote:
>>
>> I'm trying to replace a built-in exception type and here's a simplified
>> example of what I was hoping to do...
>>
>> >>>
>> >>> import exceptions, __builtin__
>> >>>
>> >>> zeroDivisionError = exceptions.ZeroDivisionError
>> >>>
>> >>> class Foo(zeroDivisionError):
>> ... bar = 'bar'
>> ...
>> >>>
>> >>> exceptions.ZeroDivisionError = Foo
>> >>> ZeroDivisionError = Foo
>> >>> __builtin__.ZeroDivisionError = Foo
>> >>>
>> >>> try:
>> ... raise ZeroDivisionError
>> ... except ZeroDivisionError, e:
>> ... print e.bar
>> ...
>> bar
>> >>>
>> >>> try:
>> ... 1/0
>> ... except ZeroDivisionError, e:
>> ... print e.bar
>> ...
>> Traceback (most recent call last):
>> File "<stdin>", line 2, in ?
>> ZeroDivisionError: integer division or modulo by zero
>> >>>
>>
>> Notice that I get my customized exception type when I explicitly raise
>> ZeroDivisionError but not when that is implicitly raised by 1/0. It
>> seems like I have to replace that exception type at some lower level,
>> but I'm not sure how/where. Does anyone know of a way to do this?
>>
>> - Nishkar
>>
>> --http://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list