最後,我打算編寫開源項目,但我深感困惑。我知道在我的代碼中使用異常處理機制是一個好主意,但我所看到的大多數開源項目(即使是流行的項目)都不使用try ... catch和exception。爲什麼?如果我在開源代碼中使用它們會發生什麼壞事?開源代碼中的異常處理(try-catch)
1
A
回答
1
但我看到的大部分開源項目(即使是流行的項目)都不使用try ... catch和exceptions。
用於開發框架的基本語言將極大地影響您的框架如何處理或應該處理錯誤條件的策略。不同的編程語言有不同的異常處理機制。 Java例如具有檢查的概念開發人員被迫處理或傳播給調用者的異常。另一方面C#不具備檢查例外的概念。很可能你所指的框架使用的語言本身沒有的概念,檢查了的例外。
舉個例子吧。假設你想構建一個讀取分隔文件並將它們加載到內存(對象)的框架。您根據程序員提供的文件名和路徑編寫一個負責讀取文件的圖層。在這種框架中一個非常常見的特殊情況是文件或路徑的名稱是無效的。如果您使用Java構建您的框架,那麼您可能會使用Java提供的文件讀取API之一來讀取該文件。 java throw
中的大多數文件讀取API檢查了開發人員必須處理或傳播的異常(例如FileNotFoundException
)。如果您的選擇語言本身強制您使用異常,那麼您肯定會遇到某種情況,您不得不使用該語言提供的異常框架。
爲什麼?如果我在開源代碼中使用它們會發生什麼壞事?
異常處理的真正問題在於正確使用此功能(特別是在具有檢查異常概念的語言中)。沒有經驗或懶惰的程序員可能會通過將例外直接傳遞到應用程序的起點來簡單地濫用此功能;只允許運行時環境處理異常。下面的代碼片段演示了一個這樣的濫用:
public static String loadData(String fileName)throws FileNotFoundException {
String resource = ResourceManager.getResource(fileName);
//code to read the file
}
public static boolean containsText(String fileName,String text)throws FileNotFoundException {
String contents = loadData(fileName);
if(contents.contains(text)) {
return truel
}
return false;
}
public static void main(String []args)throws FileNotFoundException {
containsText("/home/abc.txt","Account Number");
}
另一種方式濫用此功能將是建立一個有太多的checked異常被拋向四周的API。這將要求API的用戶編寫比實際業務/應用程序邏輯更多的異常處理代碼。
相關問題
- 1. 如何處理異常處理代碼中的異常?
- 2. FMOD - 沒有源代碼可用的未處理的異常
- 3. 處理異常的示例代碼
- 4. 偶處理程序代碼塊中未處理的異常
- 5. WCF異常處理代理
- 6. 異常處理代碼疑問
- 7. 包封物代碼,使異常處理
- 8. 爲什麼我的異常處理代碼沒有處理異常?
- 9. C++異常類源代碼
- 10. D中異常處理的開銷
- 11. 爲多種異常類型共享異常處理代碼
- 12. 基於異常類型處理異常/ HTTP狀態代碼
- 13. 意大利麪代碼,處理異常處理和錯誤?
- 14. 如何處理DotNetNuke中的對象數據源異常處理
- 15. 反向地理代碼中的異常
- 16. 用於異常處理的開源服務器應用程序?
- 17. 如何在基於JSON的RESTful代碼中處理異常?
- 18. 在我的工作中,編寫異常處理代碼
- 19. 如何在C++異常處理中包裝我的C代碼?
- 20. 以下代碼中的java錯誤異常處理
- 21. 異常處理代碼中的非法表達式錯誤
- 22. 參數無異常由MVC3中的用戶代碼處理
- 23. 如何處理代碼中的API /庫異常?
- 24. 異常處理和執行document.ready函數中的其餘代碼
- 25. 處理事務性jdbc代碼中的運行時異常
- 26. 未處理的異常,而打開OleDbConnection
- 27. 將取消能力和異常處理異步代碼
- 28. 處理asp.net數據源異常
- 29. 異常處理
- 30. 處理異常
這些開源項目使用什麼替代try/catch? – jaco0646
@ jaco0646他們只是返回值來標記錯誤 – Fresher
@Fresher你指的是什麼語言?異常處理策略幾乎都是面向語言的。例如:Java社區非常相信檢查異常,在那裏.net人們認爲它是一種反模式。如果你提到大多數腳本語言,事情就會有很大的不同。 –