Simple way of handling errors

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Wed May 6 23:38:22 EDT 2009


On Wed, 06 May 2009 20:21:38 -0700, TomF wrote:

>> The only reason you would bother going to the time and effort of
>> catching the error, printing your own error message, and then exiting,
>> is if you explicitly want to hide the traceback from the user.
> 
> Well, to me, exposing the user to such raw backtraces is unprofessional,
> which is why I try to catch user-caused errors.  But I suppose I have an
> answer to my question.

That depends on your audience. Not every program is written to be used 
for a technical incompetent audience. Some users actually *want* to see 
the errors.

But certainly there are large classes of applications where you do want 
to suppress the traceback. That's why I said "if you explicitly want to 
hide the traceback from the user" rather than "don't do this".

The idiom I use is to wrap the *entire* application in a single 
try...except block, and then put all your user-friendly error handling in 
one place, instead of scattered over the entire application:


try:
    main(sys.argv[1:])
except KeyboardInterrupt, SystemExit:
    raise
except Exception, e:
    log(e)
    print >>sys.stderr, str(e)
    sys.exit(1)



Hope this helps.



-- 
Steven




More information about the Python-list mailing list