异常会自动传播吗?

时间:2014-01-22 09:50:46

标签: exception sap abap

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:-1)

我建议您查看this链接。

这应该回答你的问题。