Исключительные ситуации

Исключение - это любое ошибочное поведение, наблюдающееся при выполнении модуля/формы.

Причины возникновения исключительных ситуаций

Исключения могут возникать вследствие сбоя в коде разработчика, недоступности ресурсов операционной системы, либо при ошибочной работе объектов платформы. В языке Fore для работы с исключительными ситуациями реализован класс Exception. Объект Exception создается для представления исключения при его возникновении. Исключение передается в стек до тех пор, пока его не обработает приложение или не завершится выполнение кода. Класс Exception имеет ряд свойств, облегчающих анализ исключения. Большая часть классов, унаследованных от Exception, не реализуют дополнительные свойства и методы, поэтому наиболее важные сведения об исключении можно найти в иерархии наследования исключения, в имени исключения и в информации, содержащейся в этом исключении.

Оператор Raise предоставляет возможность разработчику самому в нужный момент времени генерировать исключительную ситуацию.

Обработка исключительных ситуаций

В языке Fore для обработки исключений реализована структура Try … Except … Finally … End Try. После ключевого слова Try указывается блок, при выполнении которого может возникнуть исключительная ситуация.

Блок Except выполняется, если произошла исключительная ситуация. В данном блоке может содержаться блок кода, выполняемый в случае возникновения исключительной ситуации. Также в данном блоке могут содержаться блоки On...Do - это набор операторов, начинающихся с ключевого слова On, следом за которым указан тип обрабатываемого исключения: имя переменной, двоеточие и тип переменной - класс обрабатываемого исключения. Через указываемую переменную будет осуществляться доступ к информации об исключении.

Примечание. В качестве типа переменной указывается именно класс исключения, а не интерфейс, описывающий свойства этого класса. Если класс исключения не известен, то указывается базовый класс Exception. Список доступных для использования классов исключений приведен в подразделе «Системные классы исключительных ситуаций».

После ключевого слова Do указывается блок кода по обработке исключительной ситуации.

Блок Finally позволяет гарантированно выполнить некоторую последовательность операторов при выходе из блока независимо от результатов его выполнения.

Обработка исключительных ситуаций при выполнении .NET-методов

В виду различия технологий, лежащих в основе языков, в Fore нет возможности определить класс исключительной ситуации, возникшей при выполнении .NET-метода и обработать ее с помощью одного из имеющихся системных классов. Обработать исключительные ситуации .NET-методов можно только с помощью базового класса Exception.

Пример обработки исключительной ситуации, которая может возникнуть при выполнении пользовательского метода, реализованного в Fore.NET-сборке с идентификатором «UserAssm»:

Sub UserProc;
Var
    MB: IMetabase;
    Run: IForeNETRuntime;
    Asm: IForeNETRuntimeAssembly;
    Typ: IForeNETRuntimeType;
    TypInst: IForeNETRuntimeObjectInstance;
    v: Variant;
Begin
    MB := MetabaseClass.Active;
    Run := ForeNETAssemblyClass.Runtime;
    Asm := Run.Assembly(MB.ItemById("UserAssm").Bind As IForeNETAssembly);
    Typ := Asm.Type("UserAssm.UserClass");
    TypInst := Typ.CreateInstance;
    Try
        v := TypInst.InvokeMethod("Test", <Параметры метода>);
    Except On e: Exception Do
        Debug.WriteLine(e.Message);
    Finally
    End Try;
End Sub UserProc;

См. также:

Системные классы исключительных ситуаций | Оператор Try … Except … Finally … End Try | Raise