Raising an exception in the caller's frame

Thomas Heller theller at python.net
Fri Mar 21 09:46:57 CET 2003


Jp Calderone <exarkun at intarweb.us> writes:

> On Thu, Mar 20, 2003 at 09:14:22PM +0100, Thomas Heller wrote:
> > Is there any way to raise an exception in the callers (parent) frame?
> > 
> 
>   I don't believe so (at least not without performing unspeakable evil).
> 
> > See the following code, I want the exception to be raised in the 
> > do_some_work function, without changing this function itself:
> > 
> > def check_result(value):
> >     if somecondition(value):
> >         raise ValueError
> >     return value
> > 
> > def do_some_work():
> >     value = dosomething()
> >     return check_result(value)
> > 
> 
>   Consider this alternate definition of do_some_work...
> 
>     def do_some_work():
>         value = dosomething()
>         try:
>             return check_result(value)
>         except Exception, e:
>             raise e
> 
>   I'm not sure I'd use this, though - it masks useful information about the
> real source of the exception.
>  If I might ask, why do you want to do this?

Hopefully I can explain it: check_result() is not the 'cause' of the
error, it's purpose is simply to detect the error. The 'exception'
really occurrs in dosomething().

The situation is similar to what is explained for the warn() function,
see the stacklevel parameter.  Maybe I should look into the warnings
module.

Thanks,

Thomas




More information about the Python-list mailing list