assert'ом проверяются те утверждения, которые должны всегда выполняться. Если они не выполняются, то у вас в коде баг. В этом их отличие от, например, исключений. Если у вас функция возведения в квадрат вернула отрицательное число, какое исключение бросить? BadSquareImplementationException? глупость. А вот проверять что open() не вернул отрицательный файловый дескриптор нельзя, так как это вполне нормальная ситуация и бага в коде нигде нет (даже если вы в предыдущей строке этот файл создали, его кто-то мог уже успеть удалить).