On 1/16/2013 12:59 AM, Rick Johnson wrote:

Python needs to trim the path to the source file from which the
exception was caught and only display the relative path starting from
your personal library folder.

For example. Say your personal library exists in:

C:\users\user\documents\python\lib

...then there is no need to post THAT portion of the path EVERY
STINKING TIME! For instance, let's say a script at:

C:\users\user\documents\python\lib\sound\effects\echo.py

...throws an error. What will we see?

Traceback (most recent call last): File
"C:\users\user\documents\python\lib\sound\effects\echo.py", line N,
in BLAH

Why do i need to see "C:\users\user\documents\python\lib" EVERY
time?

Since all directories *BELOW* the directory that holds your personal
Python library are /superfluous/ when posting exceptions to stderr,
trimming this bloat can really help to make exception messages easier
to read.

Traceback (most recent call last): File
"...\sound\effects\reverb.py", line XXX, in YYY

I agree with the complaint and you may have the germ of a good idea. The problem is that for some tracebacks, paths jump all over the place rather than having a common prefix. Dealing with this might require preprocessing the entire traceback before iterating and printing each item.

Are you are aware of
'''
sys.excepthook(type, value, traceback)

    This function prints out a given traceback and exception to sys.stderr.

When an exception is raised and uncaught, the interpreter calls sys.excepthook with three arguments, the exception class, exception instance, and a traceback object. In an interactive session this happens just before control is returned to the prompt; in a Python program this happens just before the program exits. The handling of such top-level exceptions can be customized by assigning another three-argument function to sys.excepthook.
'''
This is how some apps and environments customize exception reporting (and logging). I believe some people also put a replacement in their site module.

>>> import sys; sys.excepthook
<built-in function excepthook>

I expect the default, excepthook, is something like

def excepthook(typ, value, traceback):
    print('Traceback (most recent call last):', file=sys.stderr)
    for item in traceback:
        print(format_tb_item(item), file=sys.stderr)
    print('{}: {}'.format(typ.__name__, value), file=sys.stderr)

(or the equivalent with sys.stderr.write)

What you want to change is format_tb_item (possibly, as I said, after scanning traceback before the print loop). If you come up with something nice, I would like to see it.

The only thing special that IDLE does now is to color the text red. I should sometime see how that is done. (Being able to doubleclick on an item and have IDLE open an edit window at the specified line would be really nice!)

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to