Ivan Pozdeev via Python-ideas writes:
The `assert' statment was created the same as in previous languages like C/C++: a check to only do in debug mode, when you can't yet trust your code to manage and pass around internal data correctly. Examples are array bounds and object state integrity constraints.
I use assert in Python as I use it in C: as a statement that something should NEVER happen, algorithmically. I do occasionally have expensive assertions in inner loops, and do use -O to disable them when I assess that speed is important enough to offset the increased risk.
Oh, yeah: I have had programs stop because I got the algorithm wrong, and because I implemented it incorrectly.
I understand the point made elsewhere about scientists' thinking about "assert", but as a scientist myself, I disagree. It is very useful to me to distinguish between validating data and validating algorithms. "assert" is how we do the latter.