Вообще-то, обработка исключений и сами исключения - зло, которое должно случаться совсем редко, лучше самому проверять параметры, а все исключения обрабатывать на самом верху. Еще лучше использовать объект типа context , куда загонять все свои ошибки и передавать его например как thread переменную. Ну а если уж и случилось исключение, то это действительно должна быть исключительная ситуация, типа нарушения транзакции или обрыв коннекта. Избегайте ситуаций, когда исключения используются для валидации и преобразования параметров - это зло, лучше добавьте пару ифов или сделайте интроспекцию с кейсом.