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