Delphi. Урок 16. Исключительные ситуации

Уроки для начинающих   6 мая 2012  Автор статьи: admin 
geekbrains.ru/

В этом уроке мы поговорим о том, что же такое исключительные ситуации.
Исключительной ситуацией называется такая ситуация, когда происходит какая-либо ошибка во время выполения программы и ее дальнейшая работы принудительно прерывается. Ситуаций таких, уж поверьте, существует огромное множество. Возьмем банальнейший пример такой ситуации — деление на ноль. Конечно же, заранее предусмотреть ее достаточно легко, например проверять число на ноль, прежде чем делить на него. Но отследить все невозможно, особенно если программа «падает», например, из-за обращения к несозданному ранее объекту (Ошибка — Access Violation). Именно поэтому гораздо легче использовать обработку исключительных ситуаций в Delphi. Они позволяют без поиска причины возникновения ошибки отловить любую исключительную ситуацию в определенном участке кода, и произвести, если необходимо, определенные операции, т.е. обработать ошибку. Рассмотрим пример исключительной ситуации:
[cc lang=»delphi»]var s: TStringList;
begin
s.Add(‘test’); // попытка обратиться к несозданному объекту.
//(Нужно было ранее его создать «s := TStringList.Create;»)
//Именно во время выполнения той строчки и возникнет ошибка
end;[/cc]
Прежде чем отловить эту ошибку, давайте сначала рассмотрим синтаксис конструкции try — except:
[cc lang=»delphi»]try
//определенные операции
//в которых возможно выпадает ошибка
except
//обработка исключительной ситуации
//если произошла исключительная ситуация,
//то все последующие операции между try и except будут
//пропущены, затем выполнены операции, которые
//находятся после ключевого слова except
end;[/cc]
Рассмотрим способ отлова ошибки из первого кода:
[cc lang=»delphi»]var s: TStringList;
begin
try
s.Add(‘test’);
except
showmessage(‘Обращение к несозданному объекту’);
end;
end;[/cc]
Важной особенностью такой обработки исключительной ситуации является то, что само окно с ошибкой не отобразится. Отобразится только то текстовое сообщение, которые мы указали между except и end.
[note]Если оставить обработчик исключения пустым, т.е. ничего не писать между except и end, то ошибка будет по сути «проигнорирована». Однако это не значит, что она не произошла, ведь работа того кода, который находится между try и except была прервана аварийно.[/note]
Рассмотрим немного другую конструкцию — try — finally:
[cc lang=»delphi»]try
//определенные операции
//в которых возможно выпадает ошибка
finally
//операции, которые будут выполнены в любом случае
//если исключения не произошло
//или оно произошло
end;[/cc]
Получение текста самой ошибки:
[cc lang=»delphi»]Try
//Вызываем ошибку
Except
on E : Exception do
ShowMessage(E.ClassName+’ ошибка с сообщением : ‘+E.Message);
end;[/cc]

Научиться программировать

  • на Delphi

  • на Java

  • на C++

geekbrains.ru/
geekbrains.ru/