Чтобы объяснить обработку исключений, объясните лежащую в ее основе концепцию: код, в котором часто возникает ошибка, не знает, как правильно обрабатывать эту ошибку. Код, который знает, как правильно с этим справиться, может быть функцией, вызвавшей эту функцию, или же он может находиться дальше по стеку вызовов.
Когда вы пишете подпрограмму, которая вызывает подпрограмму, которая может вызвать исключение, если вы знаете, как правильно обрабатывать эту ошибку, поместите вызов в блок try и поместите код обработки ошибки в блок catch. Если нет, оставьте его в покое и позвольте чему-то выше вас в стеке вызовов обработать ошибку.
Выражение «поймай ex, брось ex» не является хорошим способом обработки исключений, поскольку на самом деле он ничего не обрабатывает. Кроме того, в зависимости от того, как работает модель исключений в вашем языке, это может на самом деле быть вредным, если очищает информацию о трассировке стека, которую вы могли использовать для отладки проблемы. Просто позвольте исключению распространяться вверх по стеку вызовов, пока оно не столкнется с подпрограммой, которая знает, как с ним справиться.
Прикрепляю к посту несколько видео по теме: