АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

В тот момент, когда управление передается на Except, в программе считается, что ошибка обработана

Читайте также:
  1. A) условие равновесия на денежном рынке, когда с ростом дохода повышается процентная ставка
  2. II. Управление персоналом структурного подразделения организации
  3. S: Ситуация, когда на рынке имеется только один покупатель, называется ###.
  4. S: Ситуация, когда на рынке имеется только один покупатель, называется ###.
  5. VI: Организация и управление торгово-посреднической деятельностью на рынке товаров
  6. When in doubt - choose Pastlndf. Когда сомневаетесь - выбирайте Pastlndf.
  7. А) передается с молоком матери
  8. Автоматическое генерирующее управление
  9. АВТОМАТИЧЕСКОЕ УПРАВЛЕНИЕ В ЭНЕРГЕТИКЕ
  10. Автоматическое управление памятью ссылочных данных
  11. Анализ и управление дебиторской задолженностью
  12. Анализ персонала организации (для профиля «Управление человеческими ресурсами»)

 

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

Так возникает исключительная ситуация.

raise EOutOfMemory.Create('Маловато памяти');

 

Данный оператор создает объект класса EOutOfMemory и прерывает нормальное выполнение программы. Вызывающие подпрограммы могут эту исключительную ситуацию перехватить и обработать. Для этого в них организуется так называемый защищенный блок:

 

try

// защищаемые от ошибок операторы

except

// операторы обработки исключительной ситуации

end;

 

Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end, образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except...end пропускается


 

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

 

try

// защищаемые операторы

try

// защищаемые операторы

except

// локальная обработка исключительных ситуаций

end;

// защищаемые операторы

except

// глобальная обработка исключительных ситуаций

end;

 

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

 

Распознавание класса исключительной ситуации выполняется с помощью конструкций

 

on <класс исключительной ситуации> do <оператор>;

 

которые записываются в секции обработки исключительной ситуации.

 

try

// вычисления с вещественными числами

except

on EZeroDivide do... ; // обработка ошибки деления на нуль

on EMathError do... ; // обработка других ошибок вещественной математики

end;

 

Поиск соответствующего обработчика выполняется последовательно до тех пор, пока класс исключительной ситуации не окажется совместимым с классом, указанным в операторе on. Как только обработчик найден, выпоняется оператор, стоящий за словом do и управление передается за секцию except...end. Если исключительная ситуация не относится ни к одному из указанных классов, то управление передается во внешний блок try...except...end и обработчик ищется в нем.



 

Порядок операторов on имеет значение: распознавание исключительных ситуаций должно происходить от потомков к предкам.

 

На самом высоком уровне программы бывает необходимо перехватывать все исключительные ситуации, чтобы в случае какой-нибудь неучтенной ошибки корректно завершить приложение. Для этого применяется так называемый обработчик по умолчанию (default exception handler). Он записывается в секции except после всех операторов on и начинается ключевым словом else:


 

 

try

{ вычисления с вещественными числами}

except

on EZeroDivide do { обработка ошибки деления на нуль};

on EMathError do { обработка других ошибок вещественной математики};

else { обработка всех остальных ошибок (обработчик по умолчанию) };

end;

 

Отсутствие части else соответствует записи else raise, которое нет смысла использовать явно.

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

 

try

// вычисления с вещественными числами

except

on EZeroDivide do

begin

// частичная обработка ошибки

raise; // возобновление исключительной ситуации

end;

 

end;

 

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

 

‡агрузка...

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

 

В этом случае используется расширенная запись оператора on:

 

on<идентификатор объекта> : <класс исключительной ситуации> do<оператор>;

 

on E: EOutOfMemory do

ShowMessage(E.Message);

 

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

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |


При использовании материала, поставите ссылку на Студалл.Орг (0.007 сек.)