Even though I haven't formally introduced them to you, by now I expect you to at least have a vague idea of what an exception is. In the previous chapters, we've seen that when an iterator is exhausted, calling
next on it raises a
StopIteration exception. We've met
IndexError when we tried accessing a list at a position that was outside the valid range. We've also met
AttributeError when we tried accessing an attribute on an object that didn't have it, and
KeyError when we did the same with a key and a dictionary. We've also just met
AssertionError when running tests.
Now, the time has come for us to talk about exceptions.
Sometimes, even though an operation or a piece of code is correct, there are conditions in which something may go ...