Исключением является проблема, возникающая при выполнении программы. Когда возникает исключение, нормальный поток программы прерывается, и приложение программы ненормально завершается, что не рекомендуется, поэтому эти исключения должны быть обработаны.
Исключения предоставляют способ передачи управления из одной части программы в другую. Обработка исключений ABAP построена на трех ключевых словах — RAISE, TRY, CATCH и CLEANUP. Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию ключевых слов TRY и CATCH. Вокруг кода помещается блок TRY — CATCH, который может генерировать исключение. Ниже приведен синтаксис использования TRY — CATCH —
TRY. Try Block <Code that raises an exception> CATCH Catch Block <exception handler M> . . . . . . . . . CATCH Catch Block <exception handler R> CLEANUP. Cleanup block <to restore consistent state> ENDTRY.
RAISE — Исключения поднимаются, чтобы показать, что произошла какая-то исключительная ситуация. Обычно обработчик исключений пытается исправить ошибку или найти альтернативное решение.
TRY — блок TRY содержит код приложения, исключения которого должны обрабатываться. Этот блок операторов обрабатывается последовательно. Он может содержать дополнительные управляющие структуры и вызовы процедур или других программ ABAP. За ним следует один или несколько блоков улова.
CATCH — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово CATCH указывает на перехват исключения.
CLEANUP — операторы блока CLEANUP выполняются всякий раз, когда возникает исключение в блоке TRY, который не перехватывается обработчиком той же конструкции TRY — ENDTRY. В предложении CLEANUP система может восстановить объект в согласованное состояние или освободить внешние ресурсы. То есть работа по очистке может быть выполнена для контекста блока TRY.
Возбуждение исключений
Исключения могут возникать в любой точке метода, функционального модуля, подпрограммы и т. Д. Есть два способа исключения:
-
Исключения, поднятые системой времени выполнения ABAP.
Например, Y = 1 / 0. Это приведет к ошибке времени выполнения типа CX_SY_ZERODIVIDE.
-
Исключения подняты программистом.
Поднимите и создайте объект исключения одновременно. Создайте исключение с объектом исключения, который уже существует в первом сценарии. Синтаксис: RAISE EXCEPTION exep.
Исключения, поднятые системой времени выполнения ABAP.
Например, Y = 1 / 0. Это приведет к ошибке времени выполнения типа CX_SY_ZERODIVIDE.
Исключения подняты программистом.
Поднимите и создайте объект исключения одновременно. Создайте исключение с объектом исключения, который уже существует в первом сценарии. Синтаксис: RAISE EXCEPTION exep.
Ловить исключения
Обработчики используются для отлова исключений.
Давайте посмотрим на фрагмент кода —
DATA: result TYPE P LENGTH 8 DECIMALS 2, exref TYPE REF TO CX_ROOT, msgtxt TYPE STRING. PARAMETERS: Num1 TYPE I, Num2 TYPE I. TRY. result = Num1 / Num2. CATCH CX_SY_ZERODIVIDE INTO exref. msgtxt = exref→GET_TEXT( ). CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. msgtxt = exref→GET_TEXT( ).
В приведенном выше фрагменте кода мы пытаемся разделить Num1 на Num2, чтобы получить результат в переменной типа float.
Могут быть сгенерированы два типа исключений.
-
Ошибка преобразования числа.
-
Разделите на ноль исключений. Обработчики ловят исключение CX_SY_CONVERSION_NO_NUMBER, а также исключение CX_SY_ZERODIVIDE. Здесь метод GET_TEXT () класса исключения используется для получения описания исключения.
Ошибка преобразования числа.
Разделите на ноль исключений. Обработчики ловят исключение CX_SY_CONVERSION_NO_NUMBER, а также исключение CX_SY_ZERODIVIDE. Здесь метод GET_TEXT () класса исключения используется для получения описания исключения.
Атрибуты исключений
Вот пять атрибутов и методов исключений —
S.No. | Атрибут и описание |
---|---|
1 |
Textid Используется для определения различных текстов для исключений, а также влияет на результат метода get_text. |
2 |
предыдущий Этот атрибут может хранить исходное исключение, которое позволяет вам создавать цепочку исключений. |
3 |
get_text Это возвращает текстовое представление в виде строки в соответствии с системным языком исключения. |
4 |
get_longtext Это возвращает длинный вариант текстового представления исключения в виде строки. |
5 |
get_source_position Дает имя программы и номер строки, достигнутой там, где возникло исключение. |
Textid
Используется для определения различных текстов для исключений, а также влияет на результат метода get_text.
предыдущий
Этот атрибут может хранить исходное исключение, которое позволяет вам создавать цепочку исключений.
get_text
Это возвращает текстовое представление в виде строки в соответствии с системным языком исключения.
get_longtext
Это возвращает длинный вариант текстового представления исключения в виде строки.
get_source_position
Дает имя программы и номер строки, достигнутой там, где возникло исключение.
пример
REPORT ZExceptionsDemo. PARAMETERS Num_1 TYPE I. DATA res_1 TYPE P DECIMALS 2. DATA orf_1 TYPE REF TO CX_ROOT. DATA txt_1 TYPE STRING. start-of-selection. Write: / 'Square Root and Division with:', Num_1. write: /. TRY. IF ABS( Num_1 ) > 150. RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. ENDIF. TRY. res_1 = SQRT( Num_1 ). Write: / 'Result of square root:', res_1. res_1 = 1 / Num_1. Write: / 'Result of division:', res_1. CATCH CX_SY_ZERODIVIDE INTO orf_1. txt_1 = orf_1→GET_TEXT( ). CLEANUP. CLEAR res_1. ENDTRY. CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. txt_1 = orf_1→GET_TEXT( ). CATCH CX_ROOT INTO orf_1. txt_1 = orf_1→GET_TEXT( ). ENDTRY. IF NOT txt_1 IS INITIAL. Write / txt_1. ENDIF. Write: / 'Final Result is:', res_1.
В этом примере, если число больше 150, возникает исключение CX_DEMO_ABS_TOO_LARGE. Приведенный выше код производит следующий вывод для числа 160.