В чем разница между ошибкой и исключением в .NET? - PullRequest
14 голосов
/ 12 марта 2010

Не могли бы вы объяснить мне, в чем разница между ошибкой и исключением?

Ответы [ 8 ]

13 голосов
/ 12 марта 2010

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

Ошибки, с другой стороны, могут быть исключительными или нет.

Существует несколько видов ошибок:

  • Ошибка пользователя - это должно обрабатываться без исключения
  • Синтаксическая ошибка - это не должно компилироваться в статически типизированных языках (вдинамические языки, их немного сложнее обнаружить)
  • Ошибка времени выполнения - это приведет либо к исключению, либо к сбою (обычно приводя к неожиданным результатам)

Действительно, исключениядолжно быть ограничено обработкой ошибок во время выполнения, так как пользователь, вводящий неверные данные, не является «исключительным».Для обработки ошибок пользователя следует использовать следующие подходы:

  • Предотвращение ввода неверных данных (проверка на стороне)
  • Предотвращение сохранения неверных данных (проверка на стороне))

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

13 голосов
/ 12 марта 2010

Исключением является объект типа, производного от класса System.Exception. Он используется в операторе throw для передачи управления в предложение catch в блоке try где-то дальше вверх по стеку вызовов.

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

MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();

Этот вызов просто игнорирует код ошибки, если он возвращается. Однако:

MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();

Это не может быть проигнорировано и передаст управление стеку за "SomeCodeThatShouldNotExecuteOnError();".

2 голосов
/ 12 марта 2010

Обычно я классифицирую их как:

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

Исключение - обычно выбрасывается при выходе из вашей системы и / или что-то непредвиденное происходит в приложении. Например: открытие дескриптора файла может вызвать исключение из-за недостаточных прав или файла не существует.
Обычно в этом случае приложение может перехватить эти исключения и / или написать универсальный обработчик для обработки всех исключений в системе.

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

Все оставшиеся «неизвестные неизвестные» могут затем попасть в категорию исключений.

НТН.

2 голосов
/ 12 марта 2010

Исключения вы должны написать код, чтобы игнорировать. Коды ошибок вы должны написать код для не игнорировать.

1 голос
/ 19 августа 2012

Если обработчик исключений для данного исключения отсутствует, программа прекращает выполнение с сообщением об ошибке.

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

Ошибки могут возникать на 2 уровнях

  • Уровень страницы (используйте атрибут ErrorPage на странице Директивы)
  • Уровень приложения (необходимо обрабатывать в web.config)

Компиляция CustomError ... CustomError ошибка .... ошибка компиляция Примечание. Обработка ошибок на уровне страницы переопределяет обработку ошибок на уровне приложения.

Обработка исключений: ->

0 голосов
/ 01 марта 2015

Ошибки - это события. Класс исключения представляет ошибки, возникающие во время выполнения приложения (во время выполнения), и предоставляет механизм для их обработки с использованием блоков try catch. Ошибки могут быть во время выполнения или ошибки компилятора / s.

Примеры событий ошибок: HttpApplication.Error Событие System.Web dll, FileSystemWatcher.Error Событие System.IO Обе библиотеки имеют одно и то же определение события ошибки

public event EventHandler Error

Из документации .Net Framework 4.5 https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx

Класс исключения представляет ошибки, возникающие во время выполнения приложения.

Ошибки и исключения

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

Ошибки использования. Ошибка использования представляет ошибку в логике программы, которая может привести к исключению. Тем не менее, ошибка должна быть устранена не путем обработки исключений, а путем изменения неисправного кода.

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

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

В других случаях программная ошибка отражает состояние непредвиденной ошибки, которое может быть обработано в вашем коде.

Системные сбои. Системный сбой - это ошибка времени выполнения, которая не может быть обработана программным способом осмысленным образом. Например, любой метод может вызвать исключение OutOfMemoryException, если общеязыковая среда выполнения не может выделить дополнительную память. Обычно сбои системы не обрабатываются с помощью обработки исключений. Вместо этого вы можете использовать событие, такое как AppDomain.UnhandledException, и вызвать метод Environment.FailFast для регистрации информации об исключении и уведомления пользователя о сбое до завершения приложения.

0 голосов
/ 12 марта 2010

Исключения - это способ сообщения и обработки ошибок выполнения. Другими словами, они предназначены для сообщения об ошибках (перефразируя Krzysztof Cwalina в книге Руководство по разработке структуры ).

0 голосов
/ 12 марта 2010

Исключение : если в каком-либо действии происходит сбой, все последующие шаги этого действия просто НЕ выполняются. Вот где сияют исключения.

Ошибка: - это когда, как и в первом случае, вы хотите остановить выполнение текущего кода, но перед этим вам необходимо освободить любые ранее выделенные ресурсы.


Сказав это,

Класс исключений имеет Свойство HResult . HRESULT - это 32-разрядное значение, разделенное на три различных поля: код серьезности, код объекта и код ошибки .

Посмотрите на этот пост, он поможет вам лучше понять

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