ABAP:程序终止时不会提供任何异常处理错误

ABAP:程序终止时不会提供任何异常处理错误,abap,Abap,下面的程序编译得很好,但在执行时终止,没有任何错误。当引发异常并调用类时,程序终止,为什么程序终止?当导出但未导入r_异常时,程序似乎终止 *&---------------------------------------------------------------------* *& Report Z_TEST102 *& *&-----------------------------------------------------------------

下面的程序编译得很好,但在执行时终止,没有任何错误。当引发异常并调用类时,程序终止,为什么程序终止?当导出但未导入r_异常时,程序似乎终止

*&---------------------------------------------------------------------*
*& Report  Z_TEST102
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_test102.
TYPES: ty_fuel TYPE p DECIMALS 2,
ty_cargo TYPE p DECIMALS 2.
TYPE-POOLS icon.

*----------------------------------------------------------------------*
*       CLASS lcx_list_error DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_list_error DEFINITION INHERITING FROM cx_static_check.
  PUBLIC SECTION.
    METHODS get_exc_text
    RETURNING value(result) TYPE string.
ENDCLASS. "lcx_list_error DEFINITION
*---------------------------------------------------------------------*
* CLASS lcx_list_error IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcx_list_error IMPLEMENTATION.
  METHOD get_exc_text.
    result = 'The list contains an error.'(err).
  ENDMETHOD.                    "get_exc_text
ENDCLASS. "lcx_list_error IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_airplane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_airplane DEFINITION.
  PUBLIC SECTION.
    "---------------------------------------------
    CONSTANTS: pos_1 TYPE i VALUE 30.
    METHODS: constructor IMPORTING
    im_name TYPE string
    im_planetype TYPE saplane-planetype.
    METHODS: display_attributes
    RAISING lcx_list_error.
    CLASS-METHODS: display_n_o_airplanes.
    EVENTS: airplane_created.
  PRIVATE SECTION.
    "----------------------------------------------
    METHODS: get_technical_attributes
    IMPORTING im_type TYPE saplane-planetype
    EXPORTING ex_weight TYPE s_plan_wei
    ex_tankcap TYPE s_capacity
    RAISING cx_bc401_invalid_planetype.
    DATA: name TYPE string,
    planetype TYPE saplane-planetype.
    CLASS-DATA: n_o_airplanes TYPE i.
ENDCLASS. "lcl_airplane DEFINITION
*------------------------------------------------------------------*
* CLASS lcl_airplane IMPLEMENTATION *
*------------------------------------------------------------------*
CLASS lcl_airplane IMPLEMENTATION.
  METHOD constructor.
    name = im_name.
    planetype = im_planetype.
    n_o_airplanes = n_o_airplanes + 1.
    RAISE EVENT airplane_created.
  ENDMETHOD. "constructor
  METHOD display_attributes.
    DATA: weight TYPE saplane-weight,
    cap TYPE saplane-tankcap,
    r_exception TYPE REF TO cx_root,
    exc_text TYPE string.
    WRITE: / icon_ws_plane AS ICON,
    / 'Name of Airplane'(001), AT pos_1 name,
    / 'Type of airplane: '(002), AT pos_1 planetype.
* handle exception in case of invalid planetype:
    TRY.
        get_technical_attributes( EXPORTING im_type = planetype
        IMPORTING ex_weight = weight
        ex_tankcap = cap ).
        WRITE: / 'weight:'(003), weight,
        'tankkap:'(004), cap.
      CATCH cx_bc401_invalid_planetype INTO r_exception.
        exc_text = r_exception->get_text( ).
        WRITE: / exc_text COLOR COL_NEGATIVE.

        "Program terminates here!
        RAISE EXCEPTION TYPE lcx_list_error
        EXPORTING previous = r_exception.

    ENDTRY.
  ENDMETHOD. "display_attributes
  METHOD display_n_o_airplanes.
    WRITE: /, / 'number of airplanes: '(ca1),
    AT pos_1 n_o_airplanes LEFT-JUSTIFIED, /.
  ENDMETHOD. "display_n_o_airplanes
  METHOD get_technical_attributes.
    SELECT SINGLE weight tankcap FROM saplane
    INTO (ex_weight, ex_tankcap)
    WHERE planetype = im_type.
    IF sy-subrc <> 0.
      RAISE EXCEPTION TYPE cx_bc401_invalid_planetype
      EXPORTING planetype = im_type.
    ENDIF.
  ENDMETHOD. "get_technical_attributes
ENDCLASS. "lcl_airplane IMPLEMENTATION


START-OF-SELECTION.

  DATA: r_airplane TYPE REF TO lcl_airplane.

***** Passenger Plane ********************************************
  CREATE OBJECT r_airplane EXPORTING
                         im_name = 'LH BERLIN'
                         im_planetype = '400-400'.          "'747-400'.


  lcl_airplane=>display_n_o_airplanes( ).
  CALL METHOD r_airplane->display_attributes.
*&---------------------------------------------------------------------*
*&报告Z_TEST102
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
报告z_test102。
类型:ty_燃料类型p小数点2,
ty_货物类型p小数点2。
键入池图标。
*----------------------------------------------------------------------*
*类lcx\u列表\u错误定义
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
类lcx\U列表\U错误定义继承自cx\U静态\U检查。
公共部分。
方法获取exc文本
返回值(结果)类型字符串。
末级。“lcx\u列表\u错误定义
*---------------------------------------------------------------------*
*类lcx_列表_错误实现
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
类lcx_列表_错误实现。
方法获取exc文本。
结果='列表包含错误。'(错误)。
ENDMETHOD.“获取exc文本”
末级。“lcx\u列表\u错误实现
*----------------------------------------------------------------------*
*lcl_类飞机定义
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
lcl_类飞机定义。
公共部分。
"---------------------------------------------
常数:位置1 i型值30。
方法:构造函数导入
im_名称类型字符串
im_planetype类型saplane planetype。
方法:显示属性
引发lcx\u列表\u错误。
类方法:显示飞机。
事件:你创造了一架飞机。
私人部分。
"----------------------------------------------
方法:获取技术属性
导入im_类型saplane planetype
导出ex_重量类型s_plan_wei
ex_油箱盖类型s_容量
提升cx\u bc401\u平面类型无效。
数据:名称类型字符串,
planetype类型saplane planetype。
类别数据:n_o_飞机类型i。
ENDCLASS.“lcl_飞机定义”
*------------------------------------------------------------------*
*类lcl_飞机的实现*
*------------------------------------------------------------------*
类lcl_飞机实现。
方法构造函数。
name=im_name。
planetype=im_planetype。
n_o_飞机=n_o_飞机+1。
将事件提升到您创建的位置。
ENDMETHOD。“建造师
方法显示属性。
数据:重量类型边材重量,
盖型边沿油箱盖,
r\u异常类型引用到cx\u根目录,
exc_文本类型字符串。
写入:/icon\u ws\u平面作为图标,
/“飞机名称”(001),位于位置1“名称”,
/“飞机类型:”(002),位于位置1 planetype。
*如果planetype无效,则处理异常:
尝试
获取技术属性(导出im类型=planetype
导入ex_重量=重量
ex_油箱盖=油箱盖)。
写:/‘重量:’(003),重量,
“tankkap:”(004),第。
捕获cx\u bc401\u无效的\u平面类型到r\u异常。
exc_text=r_异常->获取_文本()。
写入:/exc\u文本颜色列\u负片。
“程序在这里终止!
引发异常类型lcx\u列表\u错误
导出以前的=r\u异常。
结束。
ENDMETHOD。“显示属性”
方法显示飞机。
写:/,/“飞机数量:”(ca1),
在位置1,飞机左对齐,/。
ENDMETHOD.“显示飞机”
方法获取技术属性。
从saplane中选择单重油箱盖
进入(出厂重量,出厂油箱盖)
其中planetype=im_类型。
如果sy subrc为0。
引发异常类型cx\u bc401\u无效\u平面类型
导出planetype=im\U类型。
恩迪夫。
ENDMETHOD。“获取技术属性”
ENDCLASS.“lcl_飞机实施”
开始选择。
数据:r_飞机类型参考lcl_飞机。
*****客机********************************************
创建对象r\u导出
im_name='LH BERLIN'
im_planetype='400-400'。"'747-400'.
lcl_飞机=>显示飞机()。
调用方法r\u Planet->display\u属性。
异常类定义:

这并不是一个简单的例子。复制一份并扔掉你不需要的所有东西来隔离问题。异常lcx\u list\u错误在哪里处理/cougt,如果它被处理过的话?这是否可能都在ALV网格单元的处理程序中?现在它不再是可执行程序了。你从哪里得到
cx\u bc401\u invalid_planetype
from?目前我没有任何可用的系统。此外,程序不会“无误终止”,除非将短转储称为错误。请尽量提供准确和完整的信息。@gram77,我打赌这种类型是错误的原因。尝试将异常类型更改为某种标准。这并不是一个简单的示例。制作一份副本,扔掉你不需要的所有东西来隔离问题。如果已经处理了异常lcx\u列表\u错误处理/cougt,那么它在哪里?这是否可能都在ALV网格单元的处理程序中?现在它不再是可执行程序了。您从哪里获得
cx\u bc401\u invalid\u planetype
?目前我没有任何系统可以使用它。此外,程序不会“无误终止”,除非调用短d