开源代码中的异常处理(try-catch)

时间:2016-09-22 18:34:36

标签: design-patterns exception-handling try-catch

最后,我打算编写开源项目,但我很困惑。我知道在我的代码中使用异常处理机制是个好主意,但我看到的大多数开源项目(甚至是流行的)都没有使用try ... catch和exception。为什么?如果我在开源代码中使用它们会发生什么坏事?

1 个答案:

答案 0 :(得分:1)

  

但是我看到的大多数开源项目(即使是受欢迎的项目)也没有使用try ... catch和exception。

用于开发框架的基本语言将极大地影响您的框架如何处理或应该处理错误条件的策略。不同的编程语言具有不同的异常处理机制。 例如,Java具有 checked 异常的概念,开发人员被迫处理或传播给调用者。另一方面,C#没有已检查异常的概念。您所指的框架可能使用的语言本身并不具备已检查例外的概念。

让我们举个例子。假设您要构建一个框架来读取分隔文件并将其加载到内存(对象)中。您编写了一个层,负责根据程序员提供的文件名和路径读取文件。在这样的框架中非常常见的一个例外情况是文件或路径的名称无效。如果您使用Java构建框架,则可能是您使用Java提供的文件读取API之一来读取文件。 java throw中的大多数文件读取API都检查了开发人员必须处理或传播的异常(例如FileNotFoundException)。如果您选择的语言本身会迫使您处理异常,那么您必然会遇到一种情况,您可以选择使用该语言提供的异常框架。

  

为什么呢?如果我在开源代码中使用它们会发生什么坏事?

异常处理的真正问题在于正确使用此功能(特别是在具有已检查异常概念的语言中)。没有经验或懒惰的程序员可能只是通过将异常传递一直到应用程序的起点来滥用此功能;只是让运行时envrionment处理异常。以下代码段演示了一种此类滥用行为:

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");
 }

滥用此功能的另一种方法是构建一个API,其中包含过多的已检查异常。这将要求API的用户编写比实际业务/应用程序逻辑更多的异常处理代码。