Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 60729
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

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

Моделирование станции технического обслуживания на GPSS + Отчет
Моделирование работы аэропорта на GPSS + Пояснительная записка
Программа тестирования (тест) - вступительные экзамены (математика, физи...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Обработка исключительных ситуаций
В ходе выполнения программы могут возникать динамические ошибки
(ошибки времени выполнения 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 Март 12 2010 19:02:52 · 1 Комментариев · 7492 Прочтений · Для печати

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


Комментарии
*-* Февраль 23 2012 10: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...
Шаблон для новост...

Случайные загрузки
HTMLredaktor
Моделирование дви...
ProLIB18
Игра в крестики н...
Анимированное поя...
DemoEdit [Исходни...
Эффект лампы на р...
ActiveX в Delphi
XPATComponents
ИНТЕРНЕТ ПРОГРАММ...
Основы программир...
Шаблон для новост...
DCMintry
Программа для рис...
Программа рисует ...
TDBF
Трассировка прово...
Binary2XMLDemo (Р...
Delphi. Готовые а...
Tank [Исходник на...

Топ загрузок
Приложение Клие... 100532
Delphi 7 Enterp... 92109
Converter AMR<-... 20103
GPSS World Stud... 15496
Borland C++Buil... 13112
Borland Delphi ... 9186
Turbo Pascal fo... 7115
Калькулятор [Ис... 5216
Visual Studio 2... 5037
FreeSMS v1.3.1 3561
Случайные статьи
DOCUMENT Property ...
• Computer (Компью...
Увеличение пропуск...
• Negotiate Securi...
Программирование: ...
У большей части со...
Программа вычислен...
Undefined label in...
Анатомия поисковой...
Рабочий стол, меню...
Процедура SetPalet...
Сейшелы
Самодельные чпу ст...
Матрицы
Внедрение технолог...
Система энергоснаб...
Duplicate unit name
Это позволит повто...
Пример создания по...
Лайтбоксы и вывеск...
Что такое рекурсия
Часто возникают ди...
однасторона
Управление двусвяз...
Процедура SetBkCol...
Статистика



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


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