繁体   English   中英

异常会自动传播吗?

[英]Do exceptions propagate automatically?

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

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

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

这取决于 - 在这种情况下取​​决于异常类层次结构。 您不能直接CX_ROOT ,您必须使用其直接子类之一:

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

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

我建议您查看链接。

这应该回答你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM