On 09/16/2009 11:39 AM, Vishal wrote:


On Tue, Sep 15, 2009 at 9:07 PM, steve <st...@lonetwin.net
<mailto:st...@lonetwin.net>> wrote:

    On 09/15/2009 08:56 PM, Vishal wrote:

        Hello,

        I would like to raise an exception of type Exception(), however the
        regular exception stack trace needs to be supressed.

        This is needed in a function that takes raw_input() from the
        user and
        based on 'Y' or 'N', the function suspends further execution and
        returns
        to the python prompt or Hicontinues. An exit() brings it out of
        the python
        process....where as what is needed is coming back to the python
        prompt.

        I want a custom message to appear instead of a regular exception
        stack
        trace message.

        How to do this? any pointers...?

    Python 2.6 (r26:66714, Jun  8 2009, 16:07:29)
    [GCC 4.4.0 20090506 (Red Hat 4.4.0-4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    > >> import traceback
    > >> try:
    ...     1 + "foo"
    ... except Exception, e:
    ...     traceback.format_stack(limit=1)
    ...
    ['  File "<stdin>", line 4, in <module>\n']
    > >> help(traceback)
    ....

    HTH,
    - steve



Forgot to mention that we are currently stuck with python2.5.2

As part of a debug/test hook, I would like to suspend further action of
a program, after a certain point in the procedure. What I had come up
with is a function named testHook() which does this:

def testHook():
"""
"""
     choice = raw_input("Would you like to continue (Y or N): ")
     try:
         if(str(choice).lower() != 'y'):
             print("You chose not to go ahead. Ok!!\nAborting Now...")
             raise Exception("User initiated Abort...")
     except Exception:
         raise # re-raise it..so we come out of execution loop

In this case, a stack trace gets printed out, before the string 'user
initiated abort' comes up. I want to remove that stack trace...so it
looks more clean to a user.

What can be done in this case?

Well, I don't understand how and from what context you are calling testHook(). My first instinct is to ask, why you can't simply return instead of 'raise' on an abort ? like so ...

def testHook(exc):
    choice = raw_input("Would you like to continue (Y or N): ")
    if(str(choice).lower() != 'y'):
        print("You chose not to go ahead. Ok!!\nAborting Now...")
        print "User initiated Abort..."
        return -1 # ...or any other value that makes sense to your app.
    else:
        raise exc # re-raise the passed exception

In which case, I am assuming testHook() called like this:
try:
    1 + "foo"
except Exception, e:
    return testHook(e)

or any other way of creating such a hook?
Yes. The way I would do this sort of this is by using decorators:

>>> def testHook(func):
...     def wrap_exception(*args):
...             try:
...                     func(*args)
...             except Exception, e:
...                     choice = raw_input("Would you like to continue (Y or N): 
")
...                     if (str(choice).lower() != 'y'):
... print("You chose not to go ahead. Ok!!\nAborting Now...")
...                             print "User initiated abort ..."
...                             print "on recieving %s" % e.message
...                             return
...                     else:
...                             print "redirect to debugger in this block ..."
...     return wrap_exception
...
>>> @testHook
... def main(a, b):
...     return a + b
...
>>> main(1, "foo")
Would you like to continue (Y or N): n
You chose not to go ahead. Ok!!
Aborting Now...
User initiated abort ...
on recieving unsupported operand type(s) for +: 'int' and 'str'
>>>


Here is a good article for introducing decorators:
http://www.ibm.com/developerworks/linux/library/l-cpdecor.html

HTH,
cheers,
- steve
--
random non tech spiel: http://lonetwin.blogspot.com/
tech randomness: http://lonehacks.blogspot.com/
what i'm stumbling into: http://lonetwin.stumbleupon.com/
_______________________________________________
BangPypers mailing list
BangPypers@python.org
http://mail.python.org/mailman/listinfo/bangpypers

Reply via email to