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

E

elmar

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?

Many thanks for your help,
Elmar
 
C

Chris Rebert

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.

Cheers,
Chris
 
E

elmar

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
 
C

Chris Rebert

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.

Cheers,
Chris
 
E

elmar

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...

Ciao,
Elmar
 
D

Diez B. Roggisch

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...

Diez
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top