Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

while notEOF(F) do

Защищенные блоки | Finally | Класс Exception | Стандартные классы исключений | While not EOF(F) do begin |


Читайте также:
  1. If Strike isn't Settled Quickly, It May Last a While
  2. While not EOF(F) do begin
  3. While the Venusian Is Ready the Martian Will Appear
  4. While «Условие» do

Begin

// Вводим символы очередного числа

ReadLn(F,S); // Здесь возможна ошибка EInOutError

// Преобразуем символы в число

k:= StrToInt (S); / / Здесь возможна ошибка EConvertError

// Проверяем число

Ifk < 0 then

raise ЕIntСheckЕrrоr.Creatе('Отрицательное число');

// Преобразуем число

... // Здесь возможна ошибка EIntError

// Вновь проверяем число

if k <= 0 then

raise EIntCheckError.Create('He положительное число');

 

end;

Except

оn Е: EIntCheckError do ShowMessage(E.Message);

оn EInOutError do ShоwМеssаgе('Некорректная файловая операция');

оn EConvertError do ShоwМеssаgе('Ошибка в записи числа');

 

оn EIntError do ShowMessage('Ошибка преобразования');

end;

end;

В этом примере создается класс EIntCheckError, который ничем, кроме названия, не отличается от своего родителя EAbort. В реальной программе потомок обычно расширяет набор полей (свойств) своего родителя или перекрывает его методы; приведенный пример лишь иллюстрирует, что этого делать не обязатель­но. При неудачной проверке следующими операторами возбуждается исключение нового класса:

 

raise ЕIntСhесkЕrrоr.Сrеаtе('Отрицательное число');

raise ЕIntСhесkЕrrоr.Сrеаtе('Ошибка преобразования');

 

При этом с помощью унаследованного конструктора Create создается новый безымянный объект, а строковый параметр обращения к конструктору запомина­ется в поле FMessage и становится доступным с помощью свойства Message объ­екта. Обработчик исключения EIntCheckError именует объект идентификатором Е и с помощью стандартной процедуры ShowMessage показывает его в небольшом окне на экране. I

Пример наглядно иллюстрирует выгоды от использования исключений. В прин­ципе, весь этот фрагмент можно было бы написать с многочисленными проверка­ми if... then, но в этом случае логика программы стала бы запутанной, а сама про­грамма - сложной в отладке.

 

Ниже приведены стандартные классы исключительных ситуаций, объявленные в модуле SysUtils. Они покрывают практически весь спектр возможных ошибок, хотя существует возможность объявить новые классы исключительных ситуаций, порожденные от класса Exception или его наследников.
• EAbort – исключительная ситуация, используемая для выхода из нескольких уровней вложенных блоков или подпрограмм. При этом на экран не выдается никаких сообщений об ошибке. Для генерации исключительной ситуации класса EAbort нужно вызвать стандартную процедуру Abort.
• EInOutError – ошибка доступа к файлу или устройству ввода-вывода. Код ошибки содержится в поле ErrorCode.
• EExternal – исключительная ситуация, возникшая вне программы, например, в операционной системе.
• EExternalException – исключительная ситуация, возникшая за пределами программы, например в DLL-библиотеке, разработанной на языке C++.
• EHeapException – общий класс исключительных ситуаций, возникающих при работе с динамической памятью. Является базовым для классов EOutOfMemory и EInvalidPointer.Создание исключительных ситуаций этого класса (и всех его потомков) полностью берет на себя среда Delphi, поэтому никогда не следует создавать такие исключительные ситуации с помощью оператора raise.
• EOutOfMemory – свободная оперативная память исчерпана (см. EHeadException).
• EInvalidPointer – попытка освободить недействительный указатель (см. EHeadException). Обычно это означает, что указатель уже освобожден.
• EIntError – общий класс исключительных ситуаций целочисленной арифметики, от которого порождены классы EDivByZero, ERangeError и EIntOverflow.
• EDivByZero – попытка деления целого числа на нуль.
• ERangeError – выход за границы диапазона целого числа или результата целочисленного выражения.
• EIntOverflow – переполнение в результате целочисленной операции.
• EMathError – общий класс исключительных ситуаций вещественной математики, от которого порождены классы EInvalidOp, EZeroDivide, EOverflow и EUnderflow.
• EInvalidOp – неверный код операции вещественной математики.
• EZeroDivide – попытка деления вещественного числа на нуль.
• EOverflow – потеря старших разрядов вещественного числа в результате переполнения разрядной сетки.
• EUnderflow – потеря младших разрядов вещественного числа в результате переполнения разрядной сетки.
• EInvalidCast – неудачная попытка приведения объекта к другому классу с помощью оператора AS.
• EConvertError – ошибка преобразования данных с помощью функций IntToStr, StrToInt, StrToFloat, StrToDateTime.
• EVariantError – невозможность преобразования варьируемой переменной из одного формата в другой.
• EAccessViolation – приложение осуществило доступ к неверному адресу в памяти. Обычно это означает, что программа обратилась за данными по неинициализированному указателю.
• EPrivilege – попытка выполнить привилегированную инструкцию процессора, на которую программа не имеет права.
• EStackOverflow – стек приложения не может быть больше увеличен.
• EControlC – во время работы консольного приложения пользователь нажал комбинацию клавиш Ctrl+C.
• EAssertionFailed – возникает при вызове процедуры Assert, когда первый параметр равен значению False.
• EPackageError – проблема во время загрузки и инициализации библиотеки компонентов.
• EOSError – исключительная ситуация, возникшая в операционной системе.


Дата добавления: 2015-07-19; просмотров: 68 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Создание собственного класса| РАЗЛИЧАТЬ -ТСЯ – ТЬСЯ

mybiblioteka.su - 2015-2024 год. (0.008 сек.)