> -- Galkov писал(а):
> А я для себя вывел "правило": это эффективно, когда причина некого "нестандартного состояния" возникает на дальнем-дальнем логическом уровне, на котором нет никакой информации, чего делать надо в таком случае, а продолжать дальше нет никакой возможности. А чего делать надо на самом деле - совершенно понятно на более верхнем уровне. Тем эффективнее, чем это "более верхний" уровень. Если промежуточные уровни не обременены знанием про то, что вообще какие-то там исключения бывают - это эффективно. Чем их больше, тем эффективнее.

Да, соглашусь.

По практике использования - ну, разумеется, в ПО 24*365 (серверном, в частности) не обойтись без этого. В определённых местах - на главных циклах приложения, ну и всякие операции, в которых куча порогов "успех-неуспех" по многим уровням вызова рассредоточена (т.е. работает последовательность многих процедур, и в каждый момент может, например, соединение нагнуться) часто хорошо писать с ASSERT-ами на успех, а потом исключение от ASSERT-а перехватить на верхнем уровне, инициировавшем операцию.
Использую окультуренную обёртку над Kernel.Try, которая в качестве параметра вызываемой процедуре передаёт ANYREC.