Если мы ссылаемся на исключения как на ошибки, почему бы просто не назвать это ошибкой, а не исключением?
Если в коде это называется исключением, и как только это происходит, это называется ошибкой. Тогда почему бы не назвать это багом?
Спасибо за любой ответ или комментарий.
Ответы:
Ну, это довольно просто: не все исключения являются ошибками (и, аналогично, не все ошибки проявляют себя как исключения).
В качестве примера исключения это не ошибка, если вы читаете файл с USB-накопителя, а кто-то выдергивает диск из гнезда. Это вызовет исключение (в большинстве языков, которые поддерживают исключения). Но это не ошибка в коде.
И наоборот, ошибка может проявляться как ошибка вычисления или что-то в этом роде. Вы все еще получаете ответ, просто он не правильный.
Сказав это, исключение, которое пробивается до вершины стека, вероятно, является ошибкой. В приведенном выше примере с USB вы должны быть в состоянии перехватить это исключение и представить пользователю хорошую ошибку: «Мы не можем прочитать файл, потому что он больше не подключен». или что-то. Если вы просто представить их с
IOException
и каким кодом ошибки фанка, то это ошибка. Но самого исключения нет.источник
Просто и ясно, исключение не является (всегда) ошибкой!
Исключение выдается (или должно быть), когда происходит что-то исключительное. Если есть проблема с моим жестким диском, и файл не может быть записан, это не ошибка. Это сбой оборудования.
Ошибка, как правило, является результатом плохого программирования. Если приложение делает что-то, что не ожидается в результате ошибки программирования, это ошибка.
источник
Они не одно и то же.
Ошибка является непреднамеренным поведением части программного обеспечения: программное обеспечение не делать то , что он должен делать. Ошибки могут существовать на всех уровнях разработки программного обеспечения, от простых старых опечаток до логических ошибок до неадекватных функциональных характеристик.
Исключение , напротив, может относиться либо необычное состояние программы, отклоняясь от нормальной работы, или, более конкретно, к конструкции языка , используемой для сигнализации и обработки таких условий.
Факт возникновения исключения может быть признаком ошибки, но часто это не так. Например, приложение, которое должно загрузить документ с URL-адреса и обработать его локально, может вызвать исключение, когда удаленный сервер не работает: приложение отклоняется от нормальной работы (оно не может загрузить и обработать документ), но если оно правильно обрабатывает исключение и восстанавливает, тогда нет ошибки.
И наоборот, наличие ошибки не обязательно проявляется как исключение. Приложение может молча отбрасывать введенные вами данные, а не хранить их в своей базе данных; исключение не выдается, но это все еще ошибка.
источник
Исключения и ошибки вообще не связаны. Конечно, иногда вы бросаете исключение, и это означает ошибку. Но иногда это просто означает исключительное, необычное обстоятельство, которое вовсе не обязательно является ошибкой в программе. Особенно в языке, удовлетворяющем исключениям, таком как Java, где каждая стандартная операция и ее собака генерируют около пяти различных исключений - например, сбой открытия файла, сбой чтения файла и т. Д.
источник
Исключения не всегда связаны с ошибками. Думайте об этом как о чем-то, что может пойти не так с тем, что вы делаете.
Примером, который приходит на ум, является InetAddress.getByName (), который используется для разрешения доменного имени. Если что-то происходит и генерируется исключение UnknownHostException, это не является проблемой кода.
источник
Программная ошибка - это общий термин, используемый для описания ошибки, ошибки, ошибки, сбоя или ошибки в компьютерной программе или системе, которая приводит к неверному или неожиданному результату или приводит к непреднамеренному поведению. Может даже быть орфографическая ошибка на этикетке.
Исключения отличаются от ошибок. Каждый тип исключения (нарушение прав доступа, переполнение стека и т. Д.) Может быть вызван отладчиком как исключение «первого шанса» или «второго шанса». Исключения первого шанса по определению не являются фатальными, если они не обрабатываются должным образом с помощью обработчика ошибок, после чего они снова вызываются как исключение второго шанса (которое может обработать только отладчик).
Если ни один отладчик не обрабатывает второе случайное исключение, приложение закрывается.
источник
Вы могли бы на законных основаниях создать исключение самостоятельно, и мы надеемся, что вы никогда не сделаете ошибку намеренно.
источник
Все исключения не являются ошибками. Это может быть предметом обсуждения, что все ошибки являются исключениями или нет.
Можно сказать, что исключениями являются события, которые не являются частью нормального или ожидаемого потока приложения. Эти события могут быть независимыми от того, как написан код, где ошибка, по сути, является результатом плохого кода (например, неправильный расчет).
Вот пример того, как не обработка исключения может быть ошибкой.
Предположим, что есть программа, которая записывает некоторые данные на внешнее устройство хранения. Во время записи внешнее запоминающее устройство было отключено, разбилось или может быть уничтожено (по какой-либо причине). Теперь это исключительный случай, теперь независимо от того, поддерживает ли язык программирования исключительную обработку или нет, если программа аварийно завершает работу или ведет себя неправильно из-за этого события, это ошибка. (Конечный пользователь может не иметь представления о том, что произошло. Это также очень неприятно) , Но если программа корректно прерывает процесс, уведомляет пользователя (другими словами, обрабатывает исключение), это явно не ошибка.
Языки программирования try catch machanism, по сути, являются инструментом, облегчающим наш выход для обработки неожиданных событий.
источник
Сводка : исключения являются свидетельством плохих результатов, ошибки (некоторые из них) являются причинами плохих результатов. Проблема (подлежащая решению) - не исключение, проблема в том, что вызвало исключение.
Resoning: ошибка дефект в разработке или реализации продукта (не ограничивается программным обеспечением). Например, не использовать должным образом оцененное реле (время / чувствительность / надежность / емкость) либо из-за неверных характеристик, либо из-за простой ошибки сборки. Исключение представляет собой реальный мир / запустить отклонение времени от предсказывал (осмелюсь сказать , «ожидаемой»?) Поведение, например, потеря контроля над транспортным средством во время вождения.
Ясно, что ошибка может вызвать исключение, как пример в 1) может привести к примеру в 2). Но не все исключения будут вызваны ошибками, например потерей контроля над транспортным средством, потому что у оператора был удар.
источник
Поскольку этот вопрос был вновь открыт для вознаграждения, позвольте мне упомянуть мою статью CUJ от 2003 года, озаглавленную «Исключение или ошибка?», Которая, похоже, в точности отвечает на вопрос ОП.
По сути, в статье определены термины «ошибка» и «исключение» (приводятся примеры) и предлагаются стратегии борьбы с каждым из них.
В статье предлагается не «обрабатывать» ошибки, а отмечать их утверждениями. Напротив, истинные исключения требуют обработки через код (возможно, выбрасывание / перехват исключений).
Главное, что ошибки требуют совершенно противоположной стратегии, чем исключения.
Вышеупомянутая статья доступна сейчас от Dr.Dobb's по адресу: http://www.drdobbs.com/an-exception-or-a-bug/184401686
источник