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

Общая информация

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

Языки программирования значительно отличаются по своей поддержке обработки исключений (в отличие от проверки ошибок, которая является нормальным процессом выполнения программы, который проверяет на непредвиденные обстоятельства, такие как неудачное завершение вызванных операций). На некоторых языках программирования существуют функции, которые не могут быть безопасно вызваны на недопустимых входных данных или функциях, которые возвращают значения, который нельзя отличить от исключений. Например, в atoi (ASCII к целочисленному преобразованию) функция может возвратиться 0 (нуль) для любого входа, который не может быть проанализирован в допустимое значение. На таких языках программист должен или выполнить проверку ошибок (возможно через некоторую вспомогательную глобальную переменную, такую как C errno) или контроль ввода (возможно, использующий регулярные выражения) или оба.

Обработка исключений создается на трех ключевых словах: попробуйте, поймайте, и бросок.

  • throw: Программа выдает исключение, когда проблема обнаруживается. Это сделано с помощью throw ключевое слово.
  • catch: Программа ловит исключение с обработчиком исключений в месте в программе, где Вы хотите решить проблему. catch ключевое слово указывает на ловлю исключения.
  • try: A try блок определяет блок кода, для которого будут активированы конкретные исключения. Это сопровождается одним или несколькими catch блоки.

Метод ловит исключение с помощью комбинации try и catch ключевые слова. Блок попытки/выгоды помещается вокруг кода, который мог бы генерировать исключение. Код в блоке попытки/выгоды упоминается как защищенный код, и синтаксис для использования попытки/выгоды похож на следующее:

try { // protected code } catch( ExceptionName e1 ) { // catch block } catch( ExceptionName e2 ) { // catch block } catch( ExceptionName eN ) { // catch block } 

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

Безопасность исключения

Безопасность исключения, как формализовано David Abrahams, гарантирует ряд инструкций по контракту, что интерфейс (или операция) предлагает w.r.t. состояние программы, если исключение происходит.

  1. Гарантия без бросков: операция, как гарантируют, не перестанет работать
  2. Сильная безопасность исключения: если операция перестанет работать, то состояние будет, как это было до отказа (семантика отката)
  3. Основная безопасность исключения: никакие утечки не произойдут, и данные оставляют в допустимом состоянии (но возможно изменяют),
  4. Никакая безопасность исключения: никакие гарантии не сделаны.

Автоматизированная обработка исключений

Автоматизированная обработка исключений является вычислительным термином, относящимся к компьютеризированной обработке ошибок. Механизмы исполнения, такие как механизмы исполнения для языка Java или Microsoft.NET, предоставляют себя автоматизированному режиму обработки исключений или обработки ошибок. В этих средах программные ошибки не "разрушают" программную или операционную систему, а скорее генерируют исключения. Недавние усовершенствования в этих механизмах исполнения позволяют специализированным дополнительным продуктам механизма исполнения обеспечить автоматизированную обработку исключений, которая независима от исходного кода и предоставляет информацию о первопричине для каждого исключения интереса.

Использование тега

Используйте этот тег для

  • Вопросы о техническом процессе как различные языки, время выполнения или дескриптор платформ (или не обрабатывают), определенные исключения.
  • Вопросы о реализации пользовательских автоматизированных возможностей обработки исключений.

Не используйте этот тег для

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

Ссылки

Синтаксис обработки исключений

Дальнейшее чтение

Досаждая сообщению в блоге исключений на MSDN Eric Lippert, 2008
Инструмент для очистки, более изящный, и тяжелее распознать сообщение в блоге на MSDN Raymond Chen, 2005
Безопасное от исключения Кодирование в веб-странице C++ Jon Kalb