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

Chris Rebert clp2 at
Fri Mar 20 10:16:18 CET 2009

On Fri, Mar 20, 2009 at 2:09 AM,  <elmar at> wrote:
> On Mar 20, 9:44 am, Chris Rebert <c... at> wrote:
>> On Fri, Mar 20, 2009 at 1:32 AM,  <el... at> 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.

Is there any reason you can't just add a parameter (e.g. 'wait') to
foo() to tell it whether to wait for the exception or not? It's
certainly less magical than detecting `try` in the caller.


I have a blog:

More information about the Python-list mailing list