Exception and error handling in Python 2 and Python 3

Python uses exceptions to indicate essentially all errors, and a few non-error conditions such as an iterator finishing. Mastering the details on how to raise and handle exceptions (including generators and context managers) is thus a crucial step towards Python mastery, and this talk covers those details, including the changes between Python 2 and Python 3.

Even more important, however, are the best practices for dealing with errors and other exceptions, especially in a program which must catch (and log and/or report) exceptions, but keep running afterwards, such as a typical “server” program.

This is the main focus of the talk, covering “Look Before You Leap” and “Easier to Ask Forgiveness than Permission” patterns, avoiding assert, keeping your exception-catching as narrow as possible, and how to properly arrange for the right kind of error-reporting to an application’s user (when excessive detail would be damaging) and to maintainers to identify (and reproduce, and fix) bugs in your code.