异常会自动传播吗?

Lil*_*hal 6 sap abap exception

我对ABAP开发相对较新,并且拥有更多Java和类似语言的经验.在Java中,任何抛出和未捕获的异常都会自动传播到调用链中,以便您可以决定如何在程序的最高(面向用户)级别处理它.

我现在想在我的一些ABAP报告中做同样的事情,我使用类方法或函数调用,其中一些深入了几个层次.特别是对于要在作业中运行的报表,我想确保处理所有异常.只要在方法的raise或exception块中指定每个可能的异常,这都可以正常工作.然而,我意识到我经常使用会引发某个异常的函数或方法,我在调用它们的方法的定义中没有明确提到这个异常.我假设这些只会传播,但ABAP文档的一部分似乎表明情况并非如此.

我现在的问题是TRY [...] CATCH cx_root在报告中使用块是否有意义.虽然这种正确捕捉在块抛出的异常没有特定的CATCH语句,文件似乎表明,在一个方法定义未明确提及的异常将抛出一个短转储未处理的异常,而不是向上移动调用链看看是否在那里处理异常.谁能证实这一点?

vwe*_*ert 9

它取决于 - 在这种情况下是异常类层次结构.你不能CX_ROOT直接子类,你必须使用它的一个直接子类:

  • CX_STATIC_CHECK必须处理或传播子类,否则程序在语法上是不正确的
  • 子类CX_DYNAMIC_CHECK不需要处理或传播,但会中止不处理或传播异常的程序
  • CX_NO_CHECK除非处理,否则将始终自动传播子类

CX_ROOT除非你真的知道自己在做什么,否则抓住应用程序通常是一个坏主意.不要试图抓住你无法处理的东西.