Cтраница 2
Программист определяет последовательность, в которой перечисляются обработчики исключений. [16]
После блока try записан блок catch, содержащий обработчик исключения для ошибки деления на нуль. Вообще, когда исключение генерируется внутри блока try, оно перехватывается блоком catch, в котором определен тип, соответствующий сгенерированному исключению. В программе на рис. 13.1. определено, что блок catch будет перехватывать объекты исключения типа DivideByZeroError; этот тип соответствует типу объекта исключения, генерируемого в функции quotient. Тело данного обработчика исключения просто выдает сообщение об ошибке и возвращает 1, что указывает на прерывание выполнения из-за ошибки. Но обработчики исключений могут быть, конечно, намного сложнее, чем этот. [17]
Что происходит, когда исключение возникает в обработчике исключения. Первоначальное исключение, которое было перехвачено, формально считается обработанным в тот момент, когда начинает выполняться обработчик исключения. Так что исключения, возникающие в обработчике, должны обрабатываться вне того блока try, в котором было сгенерировано первоначальное исключение. [18]
Возможен также вариант, когда в самом обработчике исключения в процессе обработки возникла исключительная ситуация. В этом случае обработка прерывается, прежнее исключение разрушается и генерируется новое исключение. Его обработчик ищется в блоке try... [19]
Возможен также вариант, когда в самом обработчике исключения в процессе обработки возникла исключительная ситуация. В этом случае обработка прерывается, прежнее исключение разрушается и генерируется новое исключение. Его обработчик ищется в блоке try-except, внешнем по отношению к тому, в котором возникло новое исключение. [20]
В отличие от обработчиков завершений, фильтры и обработчики исключений выполняются непосредственно операционной системой, нагрузка на компилятор при этом незначительна. [21]
Размещение обработчика исключения с типом аргумента void перед обработчиками исключений с другими типами указателей вызывает синтаксическую ошибку. [22]
Возможно, что данному типу исключения будут соответствовать несколько обработчиков исключений. В этом случае выполняется первый обработчик, соответствующий типу исключения. [23]
Деструктор сгенерированного объекта выполняется после того, как завершается выполнение обработчика исключения. [24]
Размещение кода малого объема в try требует создания большего количества обработчиков исключений, но обеспечивает специализированную обработку каждого его вида. Это упрощает возврат из исключения и продолжение выполнения программы. [25]
Напишите программу на C, которая показывает, что важна последовательность обработчиков исключений. [26]
Преимущества использования наследования для исключений заключается в том, что это дает возможность обработчику исключений перехватывать родственные ошибки, используя очень компактную запись. Конечно, можно было бы перехватывать каждый тип объекта исключения порожденного класса индивидуально, но более удобно перехватить объект исключения базового класса. [27]
При этом нет никаких гарантий, что где-то вне этой функции существует нечто ( обработчик исключения), запускающее обработку именно этого вида исключения. Если существует, то исключение будет перехвачено и обработано. Если же для этого специфического вида исключения не имеется никакого обработчика, программа завершается. [28]
Когда идет работа с библиотеками, источник вызова библиотечной функции будет, вероятно, использовать свой уникальный обработчик исключения, сгенерированного библиотечной функции. Маловероятно, чтобы библиотечная функция выполняла такую обработку ошибки, которая удовлетворила бы конкретные потребности всех пользователей. [29]
Другой недостаток заключается в том, что без поименованного параметра не существует никакого способа обратиться в обработчике исключения к объекту исключения. [30]