Исключением является необычное условие, которое требует отклонения от нормального потока программы. Обычно, исключение не должно приводить к полному отказу, но вместо этого посещаться обработчиком исключений. Обработка исключений является встроенной конструкцией на многих языках программирования. Обычно, исключения обработаны путем раскручивания стека, таким образом отката к определенному состоянию вне объема исключения и затем вызова блока обработчика или стандартной программы.
Обработка исключений является конструкцией языка программирования или механизмом компьютерного оборудования, разработанным для обработки возникновения исключений, особые условия, которые изменяют нормальный поток выполнения программы. Когда такие условия происходят, программист может решить "бросить" или "повысить" исключение. Вызванная исключительная ситуация распространит стек, пока "не поймано" соответствующей конструкцией языка, которая обычно содержит код, который справляется с ситуацией. Необработанные исключения обычно приводят к аварийному завершению.
Языки программирования значительно отличаются по своей поддержке обработки исключений (в отличие от проверки ошибок, которая является нормальным процессом выполнения программы, который проверяет на непредвиденные обстоятельства, такие как неудачное завершение вызванных операций). На некоторых языках программирования существуют функции, которые не могут быть безопасно вызваны на недопустимых входных данных или функциях, которые возвращают значения, который нельзя отличить от исключений. Например, в c 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. состояние программы, если исключение происходит.
Автоматизированная обработка исключений является вычислительным термином, относящимся к компьютеризированной обработке ошибок. Механизмы исполнения, такие как механизмы исполнения для языка Java или Microsoft.NET, предоставляют себя автоматизированному режиму обработки исключений или обработки ошибок. В этих средах программные ошибки не "разрушают" программную или операционную систему, а скорее генерируют исключения. Недавние усовершенствования в этих механизмах исполнения позволяют специализированным дополнительным продуктам механизма исполнения обеспечить автоматизированную обработку исключений, которая независима от исходного кода и предоставляет информацию о первопричине для каждого исключения интереса.
Синтаксис обработки исключений
Досаждая сообщению в блоге исключений на MSDN Eric Lippert, 2008
Инструмент для очистки, более изящный, и тяжелее распознать сообщение в блоге на MSDN Raymond Chen, 2005
Безопасное от исключения Кодирование в веб-странице C++ Jon Kalb