何时/为什么我想要在方法上引发异常?

Nat*_*han 2 ruby ruby-on-rails

我注意到rails中的一些方法使用!运算符来引发异常,如果无效的话.例如,User.create!

为什么以及何时我想使用这样的东西?

谢谢.

Hol*_*ust 6

出于各种原因,我可能想要例外

  • 我可能想确保方法成功但我不想在这里做任何实际的错误处理.但是如果某些事情失败,我可能会对请求爆炸(例如生成HTTP 500)感到满意
  • 我可能希望在其他地方进行一些错误处理,例如在调用链中的一些方法.一般来说,对于错误处理很长一段时间来说,拉出一些错误状态会更加冗长和讨厌.结构化错误处理,即使begin ... rescue ... end其更清晰.
  • 例外可以附加其他数据(例如错误消息)
  • 如果你有不同的错误类型,那么表示那些具有不同异常类而不是某些魔术id值的东西(通常在C中是常见的)通常会更清楚

当错误状态数量很少并且在调用之后直接完全处理时,有充分的理由不使用异常而是使用状态标志.但每种技术都有它的位置和时间.

顺便说一下,save方法内部调用save!,处理潜在的异常,如果有的话返回false.请参阅实现的代码.