How to use self-inspection to check for try-block
elmar at cmbi.ru.nl
elmar at cmbi.ru.nl
Fri Mar 20 11:54:18 CET 2009
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?
> >> > 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...
More information about the Python-list