Don't show Python raise-line in the exception stack Don't show Python raise-line in the exception stack python python

Don't show Python raise-line in the exception stack


Due warning: modifying the behaviour of the interpreter is generally frowned upon. And in any case, seeing exactly where an error was raised may be helpful in debugging, especially if a function can raise an error for several different reasons.

If you use the traceback module, and replace sys.excepthook with a custom function, it's probably possible to do this. But making the change will affect error display for the entire program, not just your module, so is probably not recommended.

You could also look at putting code in try/except blocks, then modifying the error and re-raising it. But your time is probably better spent making unexpected errors unlikely, and writing informative error messages for those that could arise.


you can create your own exception hook in python. below is the example of code that i am using.

import sysimport tracebackdef exceptionHandler(got_exception_type, got_exception, got_traceback):    listing  = traceback.format_exception(got_exception_type, got_exception, got_traceback)    # Removing the listing of statement raise (raise line).     del listing[-2]    filelist = ["org.python.pydev"] # avoiding the debuger modules.    listing = [ item for item in listing if len([f for f in filelist if f in item]) == 0 ]    files = [line for line in listing if line.startswith("  File")]    if len(files) == 1:        # only one file, remove the header.        del listing[0]    print>>sys.stderr, "".join(listing)

And below are some lines that I have used in my custom exception code.

sys.excepthook = exceptionHandlerraise Exception("My Custom error message.")

In the method exception you can add file names or module names in list "filenames" if you want to ignore any unwanted files. As I have ignored the python pydev module since I am using pydev debugger in eclipse.

The above is used in my own module for a specific purpose. you can modify and use it for your modules.


I'd suggest to not use the Exception mechanism to validate arguments, as tempting as that is. Coding with exceptions as conditionals is like saying, "crash my app if, as a developer, I don't think of all the bad conditions my provided arguments can cause. Perhaps using exceptions for things not only out of your control but also which is under control of something else like the OS or hardware or the Python language would be more logical, I don't know. In practice however I use exceptions as you request a solution for.

To answer your question, in part, it is just as simple to code thusly:

class MyObject(object):    def saveas(self, filename):        if not validate_filename(filename):            return False        ...

caller

if not myobject.saveas(filename): report_and_retry()

Perhaps not a great answer, just something to think about.