Описание тега exception
Общее
Обработка исключений - это конструкция языка программирования или аппаратный механизм компьютера, предназначенный для обработки возникновения исключений, особых условий, которые изменяют нормальный поток выполнения программы. Когда возникают такие условия, программист может решить "выбросить" или "возбудить" исключение. Вызванное исключение будет распространяться вверх по стеку до тех пор, пока оно не будет "поймано" соответствующей языковой конструкцией, которая обычно содержит код, который имеет дело с ситуацией. Необработанные исключения обычно приводят к ненормальному завершению работы.
Языки программирования значительно различаются по поддержке обработки исключений (в отличие от проверки ошибок, которая представляет собой нормальный поток программы, проверяющий наличие непредвиденных обстоятельств, таких как неудачное завершение вызванных операций). В некоторых языках программирования есть функции, которые нельзя безопасно вызывать для недопустимых входных данных, или функции, возвращающие значения, которые нельзя отличить от исключений. Например, в грatoi
Функция (преобразование ASCII в целое число) может возвращать 0 (ноль) для любого ввода, который не может быть преобразован в допустимое значение. В таких языках программист должен либо выполнить проверку ошибок (возможно, с помощью некоторой вспомогательной глобальной переменной, такой как C'serrno
) или проверка ввода (возможно, с использованием регулярных выражений) или и то, и другое.
Обработка исключений построена на трех ключевых словах: try, catch и throw.
try:
Аtry
block определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколькоcatch
блоки.throw:
Программа выдает исключение при обнаружении проблемы. Это делается с помощьюthrow
ключевое слово.catch:
Программа перехватывает исключение с помощью обработчика исключений в том месте программы, где вы хотите обработать проблему. Вcatch
ключевое слово указывает на перехват исключения.
Метод перехватывает исключение, используя комбинацию try
а также catch
ключевые слова. Блок try / catch помещается вокруг кода, который может вызвать исключение. Код в блоке try / catch называется защищенным кодом, а синтаксис использования try / catch выглядит следующим образом:
try
{
// protected code
}
catch( ExceptionName e1 )
{
// catch block
}
catch( ExceptionName e2 )
{
// catch block
}
catch( ExceptionName eN )
{
// catch block
}
Вы можете предоставить несколько операторов catch для перехвата различных типов исключений в случае, если ваш блок try вызывает более одного типа исключения.
Исключительная безопасность
Безопасность исключений, формализованная Дэвидом Абрахамсом, гарантирует набор руководящих принципов контракта, которые интерфейс (или операция) предлагает в отношении состояния программы в случае возникновения исключения.
- Гарантия отсутствия выброса: гарантировано, что операция не завершится неудачно
- Сильная безопасность исключений: в случае сбоя операции состояние будет таким, каким оно было до сбоя (семантика отката)
- Базовая безопасность исключений: утечек не будет, и данные останутся в допустимом состоянии (но, возможно, будут изменены)
- Безопасность без исключений: никаких гарантий не дается
Автоматическая обработка исключений
Автоматическая обработка исключений - это вычислительный термин, относящийся к компьютеризированной обработке ошибок. Механизмы времени выполнения, например, для языка Java или Microsoft .NET, могут работать в автоматическом режиме обработки исключений или ошибок. В этих средах программные ошибки не приводят к "сбою" программы или операционной системы, а скорее создают исключения. Последние достижения в этих механизмах выполнения позволяют специализированным дополнительным продуктам для механизмов выполнения обеспечивать автоматическую обработку исключений, которая не зависит от исходного кода и предоставляет информацию об основных причинах для каждого интересующего исключения.
Использование тегов
Используйте этот тег для
- Вопросы о техническом процессе того, как различные языки, среды выполнения или платформы обрабатывают (или не обрабатывают) определенные исключения.
- Вопросы о реализации пользовательских возможностей автоматической обработки исключений.
Не используйте этот тег для
- Запросы отладки, содержащие исключение как часть MCVE, но не относящиеся к исключениям. Это вопросы, которые содержат исключения, но не о них. Один из нашей предложенного редактирования отбраковки содержит текст "Метки должны помочь, чтобы описать то, что речь идет о, а не только то, что она содержит."
Ссылки
Синтаксис обработки исключений
дальнейшее чтение
Сообщение в блоге Эрика Липперта, посвященное исключениям, на MSDN, 2008
Чистое, более элегантное и сложное для распознавания сообщение в блоге MSDN, написанное Рэймондом Ченом, Веб-страница "
Безопасное для исключений кодирование на C++", 2005 год, автор Джон Калб