Глава моей компании говорит, что я должен написать все, то есть ВСЕ свой код в инструкциях Try-catch. Теперь я могу понять подход «лучше быть безопасным, чем сожалеть», но разве не слишком утомительно думать, что при создании меток будет исключение, позиция формы установлена. Были ли случаи, когда исключения в таких простых операциях.
code-reviews
Кипр
источник
источник
Ответы:
Ну, это немного преувеличено и просто приводит к шумному коду. Каковы преимущества написания всего кода (например, каждого метода) с помощью обработчика try catch? Он просто говорит вам, что в большинстве случаев нужно исправить ошибку. Часто исключение можно и нужно избегать в первую очередь.
Просмотр трассировки стека в основном достаточен для выявления причины в вашем коде, даже если ошибочный метод не выполняет саму ловушку. Бывают случаи, когда разработчики портят трассировку стека в исключениях, но это гораздо чаще случается, когда у вас есть множество обработчиков исключений. Как и все: немного хорошо, но слишком много - яд.
Обработка исключений действительно довольно проста:
Поймать исключения
Если вы думаете об этом, то всегда есть только одно место, которое хорошо для обработки возникающих исключений. И, таким образом, обработчик должен быть в этом месте.
Многие исключения даже не должны создаваться в первую очередь, поэтому не создавайте свои структуры управления вокруг обработки исключений, а старайтесь избегать возможного возникновения исключений, когда и где это возможно.
Не забывайте рано падать, когда дела идут (неустранимо) неправильно. Вводить весь код в операторы try-catch абсурдно, но не забывайте сообщать и регистрировать ВСЕ исключения.
источник
Абсолютно да! Всегда найдется способ пойти не так, как вы ожидали. И «куриное сердце» - это нелепое выражение для использования в этом контексте; разработка программного обеспечения не сводится к проверке вашего мужества путем игнорирования потенциальных проблем.
Что это действительно вопрос , является ли это полезно для исключения быть пойманным в точке , где ваши стандарты кодирования говорят , что они должны. Ваше утверждение выглядит так, как будто вы должны иметь блок try / catch вокруг каждого тела метода, и это действительно абсурдно, потому что вы часто не можете сразу сделать что-то полезное с исключением, и в этом и заключается весь смысл исключений: вы можете позволить им распространять вверх по стеку вызовов, с которым нужно иметь дело в соответствующей точке.
источник
Я бы все перевернул. Да, как правило, обработка исключений - это хорошо, но можете ли вы обрабатывать каждое возможное исключение разумным образом в том месте, где оно было перехвачено? Иногда, особенно если вы не пишете критически важное программное обеспечение, то это лучше просто аварии и записать в каком - то на полпути под контролем таким образом , когда дела идут ужасно неправильно.
Если вы не можете быть на 100% уверены, что сможете обработать каждое исключение, которое может быть перехвачено, вам, вероятно, лучше написать какой-нибудь общий обработчик исключений, заключив в него основной цикл программы - точную механику того, как это сделать, очевидно, зависит от того, на каком языке вы работаете в Там, журнал так подробно об исключении , как вы можете, сохранить состояние программы (где - то. другой , чем любые данные , хранить пользователь в настоящее время работает против - помните, что все это может быть поврежден в этой точке ), и так далее. Затем сбросьте исключение и позвольте ОС обработать его так, как он считает нужным. В этом универсальном обработчике исключений будьте готовы к катастрофическим сбоям, Затем, когда программа перезапускается, посмотрите, полезно ли это состояние, и восстановите то, что можно восстановить, если оно есть; и, возможно, предложить пользователю отправить вам сообщение об ошибке.
источник
В целом, использование try / catch настолько не рекомендуется, потому что catch-блок очень дорог с точки зрения ресурсов. Использование try / catch напоминает мне об управлении рисками . Управление рисками имеет два аспекта:
Теперь, если вы выходите из дома, пианино, падающее на вашу голову где-то, вряд ли случится (возможно, 0,001%), но может вас убить.
Обработка исключений такая. Попробуйте блок не дорого. Но catch block действительно дорог, потому что для этого нужно создать таблицу трассировки стека и делать другие вещи. Поэтому, принимая решение о блоках try / catch, вы должны учитывать, сколько раз вы, вероятно, попадете в блок catch. Если среди 10000 использований вы нажмете только 1 раз, используйте его. Но если это форма, и пользователь, вероятно, не заполняет ее правильно 50% раз, тогда вам следует избегать применения блока try / catch.
В местах, где высока вероятность возникновения исключения, рекомендуется использовать
if {} else {}
блоки, чтобы избежать возникновения исключения. Например, где вы хотите разделить два числа вместо записи:Вы должны написать:
источник
Вы должны использовать try-catch, когда это уместно, но, пожалуйста, о, пожалуйста, не перехватывайте все исключения и даже не регистрируйте их. На данный момент это запах кода и дрянная работа.
источник
Я лично терпеть не могу исключения, они очень, очень, очень трудно правильно обрабатывать. И попытка разорвать поврежденные данные ОЧЕНЬ, ОЧЕНЬ, ОЧЕНЬ сложно!
http://blogs.msdn.com/b/mgrier/archive/2004/02/18/75324.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx
http://www.joelonsoftware.com/items/2003/10/13.html
Если вы не вызываете каждую функцию, как:
Вы не сможете правильно очистить каждую точку выхода. Исключения трудны!
Единственная хорошая вещь об исключениях - это то, что если вы их не перехватите, приложение аварийно завершает работу.
источник