抛出或捕获异常类(每个异常都可能)是错误的吗?

时间:2012-09-06 10:27:22

标签: exception exception-handling

我知道这样的问题可能取决于程序员打算让他的程序做什么但是在学校我们被教导从不抛出或抓住Exception(班级)而是确保它抛出一个更具体的子类,我们期望可能发生的运行时错误(例如IllegalArgumentException)。但是,我现在正在工作,在'现实世界'中我看到很多场景代码我在前面的程序员为方法中的所有东西投掷Exception或者像Exception这样的东西而不是其中一个更具体的子类。

所以我想知道,抛出并抓住这样的一切是否可以,这样做是不是很糟糕?

3 个答案:

答案 0 :(得分:1)

这样做并没有错,但它可以使您的调试生活变得非常困难。许多人将捕获异常类并记录Exception.Message。没有足够的细节,特别是如果你在大型系统上工作,你不能总是单步执行实时代码等,这将是一项繁琐的工作。

我倾向于捕获特定的异常并相应地处理它们但是我也捕获了Exception类以确保所有异常都被捕获(在将来的框架版本中可能会更改一个对象以包含更多异常)。

答案 1 :(得分:1)

我的想法是,处理异常的方式还应该取决于您正在创建的应用程序的类型。例如,如果您正在开发某种框架或库,您不应该尝试打印错误消息或记录它们,您已经抛出它们,因为它将由使用您的框架/库来处理异常的其他开发人员负责优雅地使用你的代码。

如果您正在开发某种前端应用程序,那么您应该对异常处理更加精细。我认为在可能的情况下使用自己的异常类会更好,因为这有助于您稍后在应用程序中查明错误或运行时问题。处理异常时,应始终从更具体的异常转到一般异常。最后,您应该处理“异常”超类的异常,这样可以确保您的应用程序不会崩溃,最好是在应用程序的主入口点有一个try-catch块。在处理异常时,如果在以后诊断错误时记录错误,那么会发生什么。

答案 2 :(得分:0)

这是不好的做法,就像你学到的那样。

该规则的一个主要例外是顶级异常处理程序(用于捕获未处理的异常) - 这样做的目的是记录异常,以便稍后开发人员可以读取它们并用于修复应用程序(并且会通常需要重新抛出才能使应用程序崩溃 - 而不是让它处于不一致的状态。)