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

Уроки для начинающих   6 Май 2012  Автор статьи: admin 

В этом уроке мы поговорим о том, что же такое исключительные ситуации.
Исключительной ситуацией называется такая ситуация, когда происходит какая-либо ошибка во время выполения программы и ее дальнейшая работы принудительно прерывается. Ситуаций таких, уж поверьте, существует огромное множество. Возьмем банальнейший пример такой ситуации — деление на ноль. Конечно же, заранее предусмотреть ее достаточно легко, например проверять число на ноль, прежде чем делить на него. Но отследить все невозможно, особенно если программа «падает», например, из-за обращения к несозданному ранее объекту (Ошибка — Access Violation). Именно поэтому гораздо легче использовать обработку исключительных ситуаций в Delphi. Они позволяют без поиска причины возникновения ошибки отловить любую исключительную ситуацию в определенном участке кода, и произвести, если необходимо, определенные операции, т.е. обработать ошибку. Рассмотрим пример исключительной ситуации:

1
2
3
4
5
6
var s: TStringList;
begin
  s.Add('test'); // попытка обратиться к несозданному объекту.
  //(Нужно было ранее его создать "s := TStringList.Create;")
  //Именно во время выполнения той строчки и возникнет ошибка
end;

Прежде чем отловить эту ошибку, давайте сначала рассмотрим синтаксис конструкции try — except:

1
2
3
4
5
6
7
8
9
10
try
  //определенные операции
  //в которых возможно выпадает ошибка
except
  //обработка исключительной ситуации
  //если произошла исключительная ситуация,
  //то все последующие операции между try и except будут
  //пропущены, затем выполнены операции, которые
  //находятся после ключевого слова except
end;

Рассмотрим способ отлова ошибки из первого кода:

1
2
3
4
5
6
7
8
var s: TStringList;
begin
  try
    s.Add('test');
  except
    showmessage('Обращение к несозданному объекту');
  end;
end;

Важной особенностью такой обработки исключительной ситуации является то, что само окно с ошибкой не отобразится. Отобразится только то текстовое сообщение, которые мы указали между except и end.
[note]Если оставить обработчик исключения пустым, т.е. ничего не писать между except и end, то ошибка будет по сути «проигнорирована». Однако это не значит, что она не произошла, ведь работа того кода, который находится между try и except была прервана аварийно.[/note]
Рассмотрим немного другую конструкцию — try — finally:

1
2
3
4
5
6
7
8
try
  //определенные операции
  //в которых возможно выпадает ошибка
finally
  //операции, которые будут выполнены в любом случае
  //если исключения не произошло
  //или оно произошло
end;

Получение текста самой ошибки:

1
2
3
4
5
6
Try
  //Вызываем ошибку
Except
  on E : Exception do
    ShowMessage(E.ClassName+' ошибка с сообщением : '+E.Message);
end;

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

  • на Delphi

  • на Java

  • на C++