Нужно разделять два вида исключительных ситуаций:
1. Ситуацию можно предотавратить (деление на нуль -> проверить предварительно делитель)
2. Ситуацию предотвратить нельзя (ошибка чтения с диска).

В первом случае ASSERT необходим (даже в релизе)
Во втором случае следует использовать код возврата из процедуры и обрабатывать этот код.