何时抛出异常?

时间:2010-03-31 18:02:53

标签: exception conventions

例外是美好的事情,但我有时担心我扔太多。考虑这个例子:

  

班级用户{

  public function User(user){

    // Query database for user data

    if(!user) throw new ExistenceException('User not found');

  }
     

}

我认为简单地返回false(或者在这种情况下将所有用户数据设置为false)更有意义,而不是抛出异常。

您更喜欢哪个?

4 个答案:

答案 0 :(得分:4)

在特殊情况下抛出异常。

如果条件是您在程序正常运行中所期望的,请检查它并报告错误。为不应该发生的事情保留异常,或者向其他程序员保留不可恢复的事情。

在您的情况下,返回false更有意义(或者使用null object作为返回值)。

答案 1 :(得分:1)

我通常会将异常作为最后的手段。如果它应该从不发生并且语言支持它,我将使用某种断言(因为它发生肯定是某种类型的错误)。

如果可以避免,我会更喜欢错误代码。

当然,某些语言中有些情况你几乎没有选择。例如,c ++构造函数可以没有返回值,并且拥有部分构造的对象可能很糟糕,因此抛出异常有时是最佳选择。

总而言之,如果你可以测试错误条件并简单地以非基于异常的方式向调用者报告错误,我宁愿这样做。

答案 2 :(得分:1)

这是我的经验法则

  • 正常程序逻辑 - 使用返回代码和参数
  • 发生了一些与众不同的事 - 使用例外。

与服务器或某些其他预期的硬件或资源不可用相关的异常。发生异常时,您需要提醒开发人员或第一线支持人员需要修复某些内容。

答案 3 :(得分:1)

非常糟糕意外发生时使用例外。通常,您希望在出现不可恢复的错误时抛出异常,从而使代码状态处于不一致状态。有时,当构造函数传递了无效参数(IllegalArgumentException)时,您还希望抛出异常以暂停对象的创建。这些都是例外情况。

正如其他评论所说,谨慎使用例外情况并作为最后手段。在Java中,抛出异常会暂停JVM,因此您不希望将其用于正常的错误处理,因为它会大大降低应用程序的性能。