Python provides a quite good and feature-complete exception handling mechanism for its programmers. This is good. But exceptions, like any complex construct, are difficult to use correctly, especially as programs get large.
Most of the issues of exceptions are not specific to Python, but I sometimes feel that Python makes them more acute because of the free-n- easy manner in which it employs exceptions for its own uses and allows users to do the same. Now, what do I mean more specifically... When a program starts growing large, I find myself a bit scared of all the exceptions that might be thrown: Python's exceptions as a result of runtime-detection of errors (Python's dynamic typing also comes into play here), exceptions from libraries used by the code, and exceptions from my lower-level classes. Python doesn't allow to specify which exceptions are thrown (C++'s feature adding 'throw' after a function/method declaration specifying the exceptions that can be thrown), and this leaves me at loss - what should be caught and where ? Which errors should be left to propagate ? I've tried looking around the Python blogosphere, but there doesn't seem to be much concern with this topic. Apologies for the not-too-coherent post, but I suspect you feel the pain too and can understand my meaning. Eli P.S. There's a common case where a method is passed a filename, to do something with a file (say, read data). Should the method catch the errors possibly thrown by open(), or leave it to the caller ? P.P.S. There's a great post on conditions (Common Lisp's exceptions) here: http://dlweinreb.wordpress.com/2008/03/24/what-conditions-exceptions-are-really-about/ Not really CL specific, and can apply to Python's exceptions. -- http://mail.python.org/mailman/listinfo/python-list