Delphi. Урок 16. Исключительные ситуации
В этом уроке мы поговорим о том, что же такое исключительные ситуации.
Исключительной ситуацией называется такая ситуация, когда происходит какая-либо ошибка во время выполения программы и ее дальнейшая работы принудительно прерывается. Ситуаций таких, уж поверьте, существует огромное множество. Возьмем банальнейший пример такой ситуации — деление на ноль. Конечно же, заранее предусмотреть ее достаточно легко, например проверять число на ноль, прежде чем делить на него. Но отследить все невозможно, особенно если программа «падает», например, из-за обращения к несозданному ранее объекту (Ошибка — 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.
Если оставить обработчик исключения пустым, т.е. ничего не писать между except и end, то ошибка будет по сути «проигнорирована». Однако это не значит, что она не произошла, ведь работа того кода, который находится между try и except была прервана аварийно.
Рассмотрим немного другую конструкцию — 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 7 | Добавил: ghost_mod (14.09.2016)
Просмотров: 327 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Подписка:1
Код *: