Having your program crash is a bad thing. It happens when your program has some mistake in the code and cannot continue. But there are some cases where crashing a program early can avoid worse bugs later.
If the values we chose for
BOARDHEIGHT that we chose on line 15 and 16 result in a board with an odd number of boxes (such as if the width were 3 and the height were 5), then there would always be one left over icon that would not have a pair to be matched with. This would cause a bug later on in the program, and it could take a lot of debugging work to figure out that the real source of the bug is at the very beginning of the program. In fact, just for fun, try commenting out the assertion so it doesn’t run, and then setting the
BOARDHEIGHT constants both to odd numbers. When you run the program, it will immediately show an error happening on a line 149 in memorypuzzle.py, which is in getRandomizedBoard() function!
Traceback (most recent call last): File "C:\book2svn\src\memorypuzzle.py", line 292, in <module> main() File "C:\book2svn\src\memorypuzzle.py", line 58, in main mainBoard = getRandomizedBoard() File "C:\book2svn\src\memorypuzzle.py", line 149, in getRandomizedBoard columns.append(icons) IndexError: list index out of range
We could spend a lot of time looking at
getRandomizedBoard() trying to figure out what’s wrong with it before realizing that
getRandomizedBoard() is perfectly fine: the real source of the bug was on line 15 and 16 where we set the
The assertion makes sure that this never happens. If our code is going to crash, we want it to crash as soon as it detects something is terribly wrong, because otherwise the bug may not become apparent until much later in the program. Crash early!
You want to add
assert statements whenever there is some condition in your program that must always, always, always be
True. Crash often! You don’t have to go overboard and put
assert statements everywhere, but crashing often with asserts goes a long way in detecting the true source of a bug. Crash early and crash often!
(In your code that is. Not, say, when riding a pony.)