How to use self-inspection to check for try-block
Diez B. Roggisch
deets at nospam.web.de
Fri Mar 20 11:59:02 CET 2009
elmar at cmbi.ru.nl schrieb:
> On Mar 20, 10:16 am, Chris Rebert <c... at rebertia.com> wrote:
>> On Fri, Mar 20, 2009 at 2:09 AM, <el... at cmbi.ru.nl> wrote:
>>> 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?
>>>>> print "Calling foo"
>>>>> 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