How to use self-inspection to check for try-block

elmar at cmbi.ru.nl elmar at cmbi.ru.nl
Fri Mar 20 10:09:32 CET 2009


On Mar 20, 9:44 am, Chris Rebert <c... at rebertia.com> wrote:
> On Fri, Mar 20, 2009 at 1:32 AM,  <el... at cmbi.ru.nl> wrote:
> > Hi everyone,
>
> > is there a sufficiently easy possibility for a Python function to find
> > out whether it has been called from a try-block or not?
>
> > try:
> >  print "Calling foo"
> >  foo()
> > except:
> >  print "Got exception"
>
> > In the example above, foo() should be able to 'see' that it was called
> > from a try block, allowing it to behave differently.
>
> > Can this information be obtained from the traceback/frame/code
> > objects, or is that too difficult?
>
> It might be possible, but it seems like there ought to be a better way
> to accomplish your goal. Could you explain why you want to do this in
> the first place? Perhaps a better alternative can be found.

Well, foo() communicates with another application using sockets, and
an exception might occur in the other application. For performance
reasons, foo() normally returns before the other application has
finished execution, unless foo() is forced to wait for the result.
This can for example be achieved by using foo()'s return value (foo()
uses self-inspection to see if its return value is discarded or not).

I also want foo() to wait in case it's in a try block, so that the
user can catch exceptions that occur in the other application.

Thanks,
Elmar




More information about the Python-list mailing list