Ловля исключений: когда их не поймать? - PullRequest
4 голосов
/ 10 сентября 2011

Я писал множество небольших библиотек (кучу классов) для своего приложения в PHP Zend Framework.Я также перехватывал эти исключения в самих методах библиотеки и записывал их в файл.

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

Кажется, что не рекомендуется ловить и регистрировать большинство (за исключением особых случаев) ошибок внутрибиблиотека классов.Они должны всегда выкидывать ошибку как есть?Это было бы правильным предположением?

Буду признателен, если кто-нибудь ответит мне за это.

Ответы [ 3 ]

6 голосов
/ 10 сентября 2011

Общая философия исключений на любом языке заключается в том, что они сообщают исключительные обстоятельства .Вы должны использовать их соответственно.

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

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

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

Если вы пишете библиотечную функцию,вы можете захотеть иметь один последний блок try, охватывающий всю вашу функцию;это зависит от вас, хотя.Просто документируйте четко, какие исключения пользователь должен ожидать от вашей библиотеки.

4 голосов
/ 10 сентября 2011

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

0 голосов
/ 10 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...