I didn't include the stacktrace procedure. I added it at the end of this 
message just in case...
In a previous message I was talking about KeyboardInterrupt. The only reason 
I *have* to catch it, is because it prints a stacktrace. Soooo, here is at 
least one exception where it is an absolute pain in the behind to have a 
stacktrace in an end user program.
However, I would hate to see all kinds of special cases depending on the 
type of exception etc. etc. And except for the KeyboardInterrupt, which is 
unpredictable, most other exceptions are predictable and therefore easier to 
catch and convert to something you like.
     -Jaap-
 ------- Function Stacktrace
def StackTrace(tb):
    import os
    if tb: last_file = StackTrace(tb.tb_next)
    else: return
    file = tb.tb_frame.f_code.co_filename
    line = tb.tb_frame.f_lineno
    if file != last_file:
        if file[-3:] == '.py':
            module = os.path.split(file)[1][:-3]
            sys.stderr.write('\n    Module ' + `module`)
        else:
            sys.stderr.write('\n    File ' + `file`)
        sys.stderr.write(': line ' + `line`)
    else:
        sys.stderr.write(', line ' + `line`)
    return file