[Python-Dev] Exception masking/chaining

Brett C. drifty@alum.berkeley.edu
Tue, 10 Jun 2003 13:36:06 -0700


Walter D=F6rwald wrote:
>=20
> An open question for exception chaining was which exception type is
> tested in the except statement, the innermost or the outermost one.
>=20
> I'd say for backwards compatibility reasons this should be the outermos=
t
> exception,

That's what I was thinking.  Simpler and no surprises for old code.

> but we could add a new feature to that: Add a new exception
> subclass named Info that can be used to wrap exceptions without
> influencing the type of the exception raised. This could be used
> by code higher up in the call chain to add information to the
> exception without changing the type that gets caught in the except
> statement. For example filter() could be changed to add information
> about the iteration index where the exception happened:
>=20
> class spam:
>    def __getitem__(self, index):
>       if index=3D=3D42:
>          raise TypeError
>       return None
>=20
> x =3D filter(None, spam())
>=20
> this might give:
>=20
> Traceback (most recent call last):
>   File "spam.py", line 8, in ?
>     x =3D filter(None, foo())
>   File "spam.py", line 4, in __getitem__
>     raise TypeError("ouch")
> TypeError: ouch
> Info: in filter() at index 42
>=20

So have a function that takes the current exception, stores it as an=20
attribute of a new one, and have exception-handling code no of the=20
possible existence of the attribute and print out the info if it exists?

-Brett