簡體   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