Catching user defined exceptions from foreign modules

Derek Basch dbasch at yahoo.com
Mon Sep 30 23:26:28 CEST 2002


Thanks for this snippit:
> For class exceptions, in a try statement with an
> except clause that 
> mentions a particular class, that clause also
> handles any exception 
> classes derived from that class (but not exception
> classes from which 
> it is derived). Two exception classes that are not
> related via 
> subclassing are never equivalent, even if they have
> the same name. 

It really helped me understand. I subclassed my
'TestError' exception from a base exception class
'Error' which was derived from the 'Exception' class.
As shown in this example:
http://www.python.org/doc/current/tut/node10.html#SECTION0010500000000000000000
So I could have just caught the imported modules base
exception class and as long as the generated exception
is a subclass of the base class it will be caught.
Cool!! To bad the python book I learned from never
covered this :(. I will have to add this to a bunch
more modules now that I understand how to use it
properly. I think I had better give the base exception
classes unique names as well to avoid import
conflicts.

Thanks for all the help,
Derek Basch

> > Thanks,
> > By 'built in' I meant the python built in module
> exceptions:
> > http://web.pydoc.org/2.2/exceptions.html
> 
> 	I'll have to confess that I haven't kept fully up
> on the changes (like 
> making all exceptions "class-based").
> 
> 	To me, "built in" tends to imply something
> available without explicit 
> imports...
> 
> 	I think the following paragraph from the document
> is applicable...
> 
> For class exceptions, in a try statement with an
> except clause that 
> mentions a particular class, that clause also
> handles any exception 
> classes derived from that class (but not exception
> classes from which 
> it is derived). Two exception classes that are not
> related via 
> subclassing are never equivalent, even if they have
> the same name. 
> 
> 	You created a subclass exception as I recall (I
> deleted the files I'd 
> copied so can't check). The main program could have
> caught that if you 
> had just listed the base exception rather than the
> specific subclass. 
> Without actually testing code (I'm rushing -- have
> an appointment in 45 
> mins)...
> 
> #t1.py
> from t2 import I_Fail
> 
> try:
> 	I_Fail(123)
> except ArithmeticError, e:
> 	print "Arithmetic Error: '%s' Occurred" % e.value
> 
> 
> #t2.py
> 
> class MyFailure(ArithmeticError):
> 	def __init__(self, value):
> 		self.value=value
> 	def __str__(self):
> 		return `self.value`
> 
> def I_Fail(a):
> 	if a is not None:
> 		raise MyFailure("I_Fail received a non-null
> argument")
> 
> 
> 
> >
> > Im assuming these are automatically imported
> anytime the interpreter
> > is fired up. I will use the 'from module import
> alpha, beta,
> > charlie' syntax as this seems to be the best way.
> At least according
> > to the ActivePython documentation/Python HOW
> TO's/Do's and Dont's.
> > They even have your open() idiom in the HOW TO.
> > Thanks for all the help,
> > Derek Basch
> >
> > --- In python-list at y..., Dennis Lee Bieber
> <wlfraed at i...> wrote:
> > > Derek Basch fed this fish to the penguins on
> Monday 30 September
> >
> > 2002
> >
> > > 08:59 am:
> > > > to have to import user defined exceptions? I
> dont
> > > > rememeber having to import any of the built in
> > > > exceptions. So, here is the output of the
> fixed test1:
> > >
> > >         "built-in" -> already there... <G>
> > >
> > > > test2.TestError
> > > > fudge
> > > >
> > > > Am I doing this all wrong?
> > >
> > >         You want to use items defined in an
> imported module. I see
> >
> > three
> >
> > > alternatives...
> > >
> > > import module
> > >
> > >         all uses then become module.item
> > >
> > > from module import item1, item2, ... itemN
> > >
> > >         only the named items are useable, but
> can be used as itemM
> > >
> > > from module import *
> > >
> > >         practically everything within the module
> is available as
> >
> > item
> >
> > > The last is not recommended as you can encounter
> unexpected
> > > redefinition of names... In the last week we had
> one such...
> > >
> > > from os import *
> > >
> > > replaces the Python open() (which I understand
> is being phased out
> >
> > for
> >
> > > file()) with the low-level (C-style) open --
> totally different
> > > arguments needed.
> > >
> > > --
> > >
> > >  >
>
==============================================================
> <
> > >  >   wlfraed at i...  | Wulfraed  Dennis Lee Bieber
>  KD6MOG <
> > >  >      wulfraed at d...     |       Bestiaria
> Support Staff       <
> > >  >
>
==============================================================
> <
> > >  >        Bestiaria Home Page:
> http://www.beastie.dm.net/         <
> > >  >            Home Page:
> http://www.dm.net/~wulfraed/             <
> > >
> > > --
> > >
> http://mail.python.org/mailman/listinfo/python-list
> 
> -- 
> --
>  >
>
==============================================================
> <
>  >   wlfraed at ix.netcom.com  | Wulfraed  Dennis Lee
> Bieber  KD6MOG <
>  >      wulfraed at dm.net     |       Bestiaria
> Support Staff       <
>  >
>
==============================================================
> <
>  >        Bestiaria Home Page:
> http://www.beastie.dm.net/         <
>  >            Home Page:
> http://www.dm.net/~wulfraed/             <


__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com




More information about the Python-list mailing list