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

Diez B. Roggisch deets at
Fri Mar 20 11:59:02 CET 2009

elmar at schrieb:
> On Mar 20, 10:16 am, Chris Rebert <c... at> wrote:
>> On Fri, Mar 20, 2009 at 2:09 AM,  <el... 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.
> The system is used by people who don't know about these technical
> details, and the goal is to hide the complexity from the user, without
> having to explain when to add a 'wait' parameter etc.
> Anyway, thanks for your time. I'll dig something out...

They can't be bothered with parameters (or a second function, name 
"foo_wait" that passes the wait-parameter to the first one), but they 
know about exception handling? Interesting people...


More information about the Python-list mailing list