catching exceptions from an except: block
Gerard Flanagan
grflanagan at yahoo.co.uk
Fri Mar 9 02:49:59 EST 2007
On Mar 8, 10:31 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Thu, 08 Mar 2007 06:17:37 -0300, Gerard Flanagan
> <grflana... at yahoo.co.uk> escribió:
>
> > @onfail(False)
> > def a(x):
> > if x == 1:
> > return 'function a succeeded'
> > else:
> > raise
>
> I know it's irrelevant, as you use a bare except, but such raise looks a
> bit ugly...
>
> --
> Gabriel Genellina
Agreed. I thought a 'gentle reader' could have filled in the blanks,
but I suppose I should have taken the time to put in a custom
exception.
Another version:
import exceptions
class ABCException(exceptions.Exception):
pass
class DoItException(exceptions.Exception):
pass
def onfailFalse(fn):
def inner(*args, **kwargs):
try:
return fn(*args, **kwargs)
except ABCException:
return False
return inner
@onfailFalse
def a(x):
if x == 1:
return 'function a succeeded'
else:
raise ABCException()
@onfailFalse
def b(x):
if x == 2:
return 'function b succeeded'
else:
raise ABCException()
@onfailFalse
def c(x):
if x == 3:
return 'function c succeeded'
else:
raise ABCException()
def doit(x):
for f in [a, b, c]:
result = f(x)
if result:
return result
raise DoItException()
print doit(1)
print doit(2)
print doit(3)
print doit(4)
More information about the Python-list
mailing list