seldan24 <selda...@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. <URL:http://docs.python.org/library/sys#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’ exception handler. -- \ “Nature hath given men one tongue but two ears, that we may | `\ hear from others twice as much as we speak.” —Epictetus, | _o__) _Fragments_ | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list