Исключительные ситуации представляют собой структурный, унифицированный, типобезопасный способ обработки нештатных (ошибочных) ситуаций как на системном, так и на прикладном уровне.
Исключения могут происходить по следующим причинам:
Оператор Raise возбуждает исключительную ситуацию безусловно и немедленно;
Определенные ошибочные ситуации, которые возникают в процессе выполнения операторов и вычисления выражений, могут вызывать исключительную ситуацию, в случае если операция не может быть завершена штатным образом. Например, выполнение операции целочисленного деления приводит к исключению типа System.DivideByZeroException, в случае если производится деление на ноль.
Для обработки исключений используется оператор Try…Except…Finally…End Try. После ключевого слова Try указывается блок, при выполнении которого может произойти исключительная ситуация.
Блок Except выполняется, если произошла исключительная ситуация. В данном блоке может содержаться блок кода, выполняемый в случае возникновения исключительной ситуации. Также в данном блоке могут содержаться блоки On...Do - это набор операторов, начинающихся с ключевого слова On, следом за которым указан тип обрабатываемого исключения: имя переменной, двоеточие и тип переменной - класс обрабатываемого исключения. Через указываемую переменную будет осуществляться доступ к информации об исключении. В качестве типа переменой указывается класс System.Exception или какой-либо класс, наследуемый от System.Exception.
Try
//...
//Выполнение кода, в котором может возникнуть ошибка
//...
Except On Ex: System.Exception Do
Begin
//Обработка исключительной ситуации
End;
On Ex: System.ArgumentOutOfRangeException Do
Begin
//Обработка исключительной ситуации
End;
Else
Begin
//Обработка всех остальных исключительных ситуаций
End;
Finally
//Блок, выполняемый всегда
End Try;
Язык Fore основан на использовании COM-технологии. Если при использовании системных свойств/методов языка Fore возникает исключительная ситуация, то для обработки таких исключений используется класс System.Runtime.InteropServices.COMException.
Если исключительная ситуация возникает при использовании свойств/методов, реализованных в пользовательских Fore-сборках, то обработать такие исключения можно с использование класса System.Exception.
Пример обработки исключительной ситуации, которая может возникнуть при выполнении системного Fore-метода IMetabaseDefinition.Open:
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Sp: ISecurityPackage = New StandardSecurityPackage();
Begin
Try
Mb := Params.Metabase;
Mb.Definition.Open(Sp.CreateCredentials(AuthenticationMode.amPassword),
ApplicationMode.amWin, LocaleCodeID.lcidRussian);
Except On Ex: System.Runtime.InteropServices.COMException Do
System.Diagnostics.Debug.WriteLine(Ex.Message);
Finally
End Try;
End Sub;
Пример обработки исключительной ситуации, которая может возникнуть при выполнении пользовательского метода, реализованного в Fore-сборке с идентификатором «UserAssm»:
Public Shared Sub Main(Params: StartParams);
Var
Svc: IForeServices;
Run: IForeRuntime;
Assembly: IForeAssembly;
FClass: IForeClass;
FSub: IForeSub;
FObj: IForeObject;
Begin
Svc := Params.Metabase As IForeServices;
Run := Svc.GetRuntime();
Run.LoadAssembly("UserAssm");
Assembly := Run.BindToAssembly("UserAssm");
FClass := Assembly.BindToClass("UserClass");
FObj := FClass.CreateObject();
FSub := FClass.BindToMethod("Test");
FSub.Self := FObj;
Try
FSub.Invoke();
Except On Ex: System.Exception Do
System.Diagnostics.Debug.WriteLine(Ex.Message);
Finally
End Try;
End Sub;
См. также: