簡體   English   中英

空抓塊

[英]Empty catch block

有一個庫(我無法控制)包含一個名為Inner的函數,它引發了類型為StupidException的異常。 我正在編寫一個名為Outer的函數,它調用Inner 我不能提前告訴我什么時候會引發StupidException ,我無法以任何合理的方式處理它。 我不希望我的函數Outer的調用者看到StupidException - 我將通過從Outer返回null來傳達這種情況(由於幾個原因)。 所以,在我看來,最合理的代碼是:

public thing Outer()
{
  thing result = null;
  try
  {
     result = Inner();
  }
  catch(StupidException ex)
  {
     // do nothing
  }
  return result;
}

我已經閱讀了關於空陷阱是如何邪惡的嚴厲警告,因為它“吞下”異常。 吞下異常正是我想要做的事情,實際上,這里空的捕獲塊對我來說仍然感覺不對。 有沒有更好的辦法?

如果這會讓你感覺更舒服,你可以從catch塊返回,這樣它看起來不會是空的:

public thing Outer()
{
    try
    {
        return Inner();
    }
    catch
    {
        return null;
    }
}

如果意圖是吞下例外,這是正常的。 您可能只想驗證此內部函數可能拋出的異常類型,以便僅捕獲它們而不是捕獲所有異常。 例如,您可以聯系此代碼的作者,以詢問他們的代碼可能拋出的異常類型,然后僅針對這些異常。

您需要所有預期異常的列表,您可以從Inner獲取並僅捕獲這些異常。 這是正確的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM