Summary
In this chapter, we went into the gritty details of raising, handling, defining, and manipulating exceptions. Exceptions are a powerful way to communicate unusual circumstances or error conditions without requiring a calling function to explicitly check return values. Specifically, we covered:
Built-in exceptions and raising exceptions
Several ways to handle specific exceptions
Defining new exceptions
Using exceptions for unexceptional circumstances
In the next chapter, everything we've studied so far will come together as we discuss how object-oriented programming principles and structures should best be applied in Python applications.