Best Way to Handle All Exceptions
ben+python at benfinney.id.au
Mon Jul 13 20:09:06 EDT 2009
seldan24 <seldan24 at gmail.com> writes:
> I'm fairly new at Python so hopefully this question won't be too
> awful. I am writing some code that will FTP to a host, and want to
> catch any exception that may occur, take that and print it out
> (eventually put it into a log file and perform some alerting action).
You have been given a lot of advice so far about catching exceptions
with the ‘try … except’ syntax. But reading your request, I think
perhaps you don't want to catch exceptions at all.
Instead of catching *all* exceptions at a specific point in your code,
and then having nothing to do but end the program (possibly after some
pre-exit action like logging), I think you would be better served by
installing a custom top-level exception handler.
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.
With a custom top-level exception handler in place, you should then
restrict your use of ‘try: … except FooException: …’ to be as precise
as possible, so that the ‘try’ block is as small as possible and the
‘FooException’ is as specific as possible.
Any other exceptions that you don't specifically catch will then go
through to your default handle-it-just-before-we-exit ‘sys.excepthook’
\ “Nature hath given men one tongue but two ears, that we may |
`\ hear from others twice as much as we speak.” —Epictetus, |
_o__) _Fragments_ |
More information about the Python-list