日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP ABAP 异常处理

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP ABAP 异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異常是在程序執行期間出現的問題。?當異常發生時,程序的正常流程中斷,程序應用程序異常終止,這是不推薦的,因此這些異常將被處理。

異常提供了一種將控制從程序的一個部分轉移到另一個部分的方法。?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?- 程序在要處理問題的程序中的地方使用異常處理程序捕獲異常。?CATCH關鍵字表示捕獲異常。

CLEANUP?- 每當在TRY塊中發生異常,而TRY塊未被同一TRY - ENDTRY結構的處理程序捕獲時,將執行CLEANUP塊的語句。?在CLEANUP子句中,系統可以將對象恢復到一致狀態或釋放外部資源。?也就是說,可以對TRY塊的上下文執行清除工作。

提出異常

可以在方法中的任何點,函數模塊,子例程等提出異常。?有兩種方式可以引發異常:

  • 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()方法用于獲取異常的描述。

異常的屬性

這里是異常的五個屬性和方法:

編號屬性和說明
1

Textid

用于定義異常的不同文本,并且也影響方法get_text的結果。

2

Previous

此屬性可以存儲原始異常,允許您構建異常鏈。

3

get_text

這將根據異常的系統語言將文本表示作為字符串返回。

4

get_longtext

這會將異常的文本表示的長變體作為字符串返回。

5

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生成以下輸出。

Square Root and Division with: 160 The absolute value of number is too high Final Result is: 0.00

總結

以上是生活随笔為你收集整理的SAP ABAP 异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。