It is unacceptable to catch AssertionError.  An assert statement in a function should mean, "this condition will always be true, I know because of the very structure of the code."   If we find the need to catch AssertionError, it means that 1) the programmer who wrote the assertion didn't understand the variety of code in the system, or 2) the situation has changed, or 3) there is a bug in the code.