Assert - это макрос (в C / C ++ или функция в других языках), который проверяет заданное выражение как true или false и выдает исключение в случае ложных значений.
Assert - это то, что нужно использовать при отладке приложения, например, когда вы должны проверить, действительно ли математическое выражение дает вам подходящее значение, или член объекта / структуры не равен нулю или отсутствует что-то важное, и тому подобное.
Исключение - это скорее настоящая обработка ошибок. Исключения также являются ошибками и могут остановить ваше приложение, но они используются в качестве (скажем, «розничной версии» обработки ошибок приложения). Это связано с тем, что исключения могут быть перехвачены и восприняты пользователем по-разному, с небольшим нетехническим сообщением вместо символов и адресов памяти, а вы, например, можете просто сериализовать это в журнал приложения.
С другой стороны, утверждения просто остановят запущенный процесс и сообщат вам следующее сообщение: «Ошибка подтверждения в source_file.ext, строка X. Процесс будет завершен». И это не удобно для пользователя:)