Вы должны поймать исключение в том месте кода, где вы можете что-то с этим сделать.Зачастую код, генерирующий исключение, не в состоянии решить проблему, но метод, вызвавший этот код, или метод, вызвавший метод, вызвавший этот код, могут изящно справиться с проблемой.
Скажем, у вас есть код, который пытается открыть файл и прочитать некоторые данные, и он генерирует исключение, если файл не существует.Код в этой области не может сделать ничего, кроме залога, но несколько кадров вверх по стеку вызовов вызывающий метод может сказать: «О, хорошо, есть исключение. Вместо этого я попробую этот альтернативный файл» или «Я думаю, этот файл не был»не существует, поэтому я продолжу и создам новый. "
Это действительно одно из больших преимуществ исключений: они освобождают разработчика от необходимости немедленно обрабатывать все возможные ошибки.Вы можете написать код, ожидая, что он будет работать большую часть времени, и ваш код не должен быть загроможден большой обработкой ошибок.Пока вы рекламируете, какие исключения вы можете генерировать, вы можете сделать код выше в стеке вызовов, чтобы решать проблемы таким образом, чтобы это соответствовало тому, что этот код пытается сделать.