Здравствуйте, uzhas, Вы писали:
U>я предложил два решения с разной подробностю ошибок
U>1) "Cannot find file"
U>2) "Failed to open database. Details: cannot find file"
Мое ИМХО — в данном случае, юзеру "что в лоб, что по лбу"

.
Он не может сделать то, что хотел. Он хотел залогиниться на удаленный хост?
Он не может этого сделать по вине того самого хоста.
Никакие файлы базы ему и в страшном сне не присняться.
То, что программа не смогла открыть файл базы — это будет интересно админу.
Ну, может продвинутым юзерам это тоже будет интересно, но легче от этого знания ни им, ни вобщем-то и админу не станет. Почему? Да вобщем-то потому, что программа не может найти
свой собственный файл. Только ты в момент написания (ну или по факту баг-репорта

) можешь решить как это обрабатывать.
U>в плане имплементации первый вариант делается легко : пишем только throw, а catch пишем лишь на самом верху
U>во втором случае catch надо писать уже много где, чтобы цеплять информацию о контексте выполнении. неясно как дешево это сделать (чтобы и времени много не уходило и код не перемешивался с ценной логикой)
Лично я склоняюсь ко второму варианту, где все исключения внутри компонента обрабатываются на его границе (пока мы знаем максимум о контексте). Что нельзя обработать — добываем контекст и пускаем дальше
новое исключение — дабы не плодить развесистые catch-блоки.