Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,370
новичок: dogoco6
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование автовокзала + Отчет + Блок схема
Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Обработка задач на ЭВМ на GPSS + Пояснительная записка

Обработка исключительных ситуаций
В ходе выполнения программы могут возникать динамические ошибки
(ошибки времени выполнения Run Time Errors), которые являются следст-
вием неправильной работы инструкций, процедур, функций или методов
программы. Для обработки динамических ошибок введено понятие ис-
ключения.
Исключение – это результат выполнения некорректного оператора,
вызывающий прерывание или полное прекращение работы программы.
Обработка исключения состоит в нейтрализации вызвавшей его динами-
ческой ошибки.
Исключения могут возникать, например, при попытке деления на ноль
или в результате выполнения вычислений; в случае нехватки памяти; из-за
ошибки преобразования; при попытке обращения к несуществующему
элементу массива и т.д. Независимо от источника ошибки приложение
информируется о его возникновении.
Возникающие при выполнении программы динамические ошибки ав-
томатически преобразовываются средствами Delphi в соответствующие
объекты-исключения. Объект-исключение содержит информацию о типе
ошибки и при возникновении исключения заставляет программу временно
приостановиться. После обработки исключения объект-исключение авто-
матически удаляется.
При работе в среде Delphi при каждой исключительной ситуации среда
перехватывает управление программой. Для отмены реакции среды на
исключительную ситуацию необходимо вызвать опцию Tools/Debugger
Options
и на вкладке Language Exceptions отменить переключатель Stop
on Delphi Exceptions
.
В Delphi базовым классом для всех исключений служит класс
Exception, от которого порождены многочисленные дочерние типы, соот-
ветствующие часто встречающимся случаям ошибок ввода/вывода, рас-
пределения памяти и т.п.
Часто используются классы исключений, представленные в табл. 4.5.
Таблица 4.5. Наиболее используемые классы исключений
Обработка исключительных ситуаций
Для обработки исключений введены две конструкции: try..finally
и try..except.
Конструкция try .. finally
Конструкция try..finally состоит из двух блоков (try и finally):
try
//операторы, выполнение которых может вызвать ошибку
finally
//операторы, выполняемые всегда, даже в случае ошибки
end;



Если в любом из операторов блока try возникает исключение, то
управление передается первому оператору блока finally. Если исключе-
ние не возникло, то выполняются все операторы обоих блоков. Конструк-
ция try..finally не обрабатывает исключение, а выполняет действия,
которые должны быть произведены даже в случае возникновения ошибки.
Например,
var f: File;
begin
AssignFile(f, 'Somefile.ext');
try // оператор, в котором возможна ошибка
Reset(f); // работы с файлом
finally
CloseFile(f)
end;



Конструкция try .. except
Конструкция try..except также состоит из двух блоков (try и except):
try
//операторы, выполнение которых может вызвать ошибку
except
//операторы, которые выполняются только в случае ошибки
end;



Конструкция try..except работает так: если в любой из инструкций
блока try возникает исключение, то управление передается первой инст-
рукции блока except, которая ликвидирует исключительную ситуацию и
восстановит работоспособность программы. Если же исключение не воз-
никло, то инструкции блока except не выполняются. Например,
var f: File;
begin
AssignFile(f, 'Somefile.txt');
try //оператор, в котором возможна ошибка
Reset(f); // работы с файлом
except
ShowMessage(‘Ошибка работы с файлом Somefile.txt’);
CloseFile(f)
end
end;



Блок except можно разбить на несколько частей с помощью конст-
рукции on..do, позволяющей анализировать класс исключения для его
более удобной и полной обработки:
try
Оператор1;
Оператор2;
. . .
except
on Идентификатор1: класс исключения do Оператор обработки
ИС этого класса;
on Идентификатор2: класс исключения do Оператор обработки
ИС этого класса;
. . .
else Операторы обработки исключения по умолчанию
end;



При возникновении исключительной ситуации конструкции on..do
просматриваются последовательно, в порядке их описания. Каждый тип
исключительной ситуации, описанный после ключевого слова on, обраба-
тывается именно этим блоком: только то, что предусмотрено в нем, и бу-
дет реакцией на данную ситуацию. Если при этом обработчик родитель-
ского класса стоит перед дочерним, последний никогда не получит управ-
ление. Если класс возникшего исключения не совпадает с проверяемым
классом, то выполняется оператор после слова else. Блок else является
необязательным и может отсутствовать.
Идентификатор – это локальная переменная класса исключения, ко-
торую можно использовать для доступа к объекту возникшего исключения
внутри конструкции on..do. Идентификатор (произвольное имя, заданное
программистом) является необязательным элементом и может отсутство-
вать, при этом не ставится и разделительный знак двоеточия (:).
Стандартная обработка подразумевает вывод на экран сообщения с
указанием типа ошибки, имени модуля и адреса, где она имела место. Од-
нако ее легко переопределить:
try
U:= 220.0;
R:= 0;
I:=U/R;
except
on EZeroDivide do ShowMessage('Короткое замыкание!')
end;



Можно обработать исключение со стандартным сообщением кода
ошибки. Например:
try
Reset(f);
while not EOF(f) do
begin … end; // возможна ошибка работы с файлом
Close(f);
except
on E:EInOutError do ShowMessage(′При выполнении файло-
вой операции’ + #13#10 + ‘возникла ошибка №′
+ IntToStr(E.ErrorCode))
end;










Опубликовал Kest March 12 2010 16:02:52 · 1 Комментариев · 8817 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
*-* February 23 2012 06:35:39
спсsmiley
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
MiniChat
PBEditPack
AdBlaster v2.5 - ...
ScreenSaver [Исхо...
Delphi 2005 Учимс...
Delphi. Разработк...
Мод "register.php...
Java 2. Наиболее ...
PHP/MySQL для нач...
JanButtonsV
Х. М. Дейтел, П. ...
Calendar
WebReg v1.3
Rotolabel
Панель статистики...
Экранная лупа
Illusion
CoolDev TipsSyste...
Библия для програ...
База англоязычных...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97836
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Язык С и С ++: ука...
Ключевые слова в ...
Сенсорные экраны
Процедура FillElli...
Помещение формы в ...
Этап опытной экспл...
Трехэтапный обмен ...
Задание правил сох...
Числовые системы в...
Проектирование с у...
ТАБЛИЦЫ В GPSS
MARK (ОТМЕТИТЬ)
Установка маршрути...
Модельное время. С...
MIPS-инструкции не...
И все же – как выб...
Стратегия
Старда казино
Visual FoxPro сам ...
Потери динамически...
Ограничение ущерба
Формат PNG
Как быть программи...
Онлайн-казино Эльд...
Идеалы программиро...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?