簡體   English   中英

刪除過度熱心的try..catch塊的破壞性最小的方法是什么?

[英]What is the least disruptive way to remove over-zealous try..catch blocks?

我繼承的代碼庫充滿了錯誤隱藏的反模式

public void foo() {
  try {
    //Entire body of method, sometimes only 5 lines but often 500+
  } catch (Exception e) {
    Logger.LogToFile(e.msg); 
  }
}

該模式的實例數量為數百個。

我的方法是完全刪除try..catch塊,因為我們已經在頂層有一個異常處理程序。 這是不受歡迎的,因為我覺得我正在改變行為。 (更多例外會冒泡)。

理想情況下,我會遍歷10-500行的100個實例中的每一個,並找出可能拋出的異常。 然后我只會在更嚴格的塊中壓縮這些異常:

public void foo() {
  //...
  try {
    // ~1-5 lines
  } catch (ArgumentInvalidException e) {
    Logger.LogToFile(e.ToString()); 
    //TODO handle
  }
  //...
  try {
    // ~1-5 lines
  } catch (UnitConversionException e) {
    Logger.LogToFile(e.ToString()); 
    //TODO handle
  }
  //...
}

這是一項令人生畏的努力。

誰能想到一個聰明的方法來解決這個問題?

相關 - 刪除過多的try-catch塊

在這種情況下,可能“提取方法” http://refactoring.com/catalog/extractMethod.html會有所幫助。 當我編寫代碼時,我嘗試區分錯誤和異常。 錯誤!=常見情況下的例外情況。 例外情況過於昂貴,並且只有在特殊情況下才會發生。

我會解釋:

try
{
    int.Parse("..")
}
catch()
{
    // parsing Exception
}

VS

if(int.TryParse("..", out value)
{
    // parsing Error
}

暫無
暫無

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

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