user1934428 user1934428 - 1 year ago 58
Ruby Question

Fail vs. raise in Ruby : Should we really believe the style guide?

Ruby offers two possibilities to cause an exception programmatically: 'raise' and 'fail', both being Kernel methods. According to the documents, they are absolutely equivalent.

Out of a habit, I used only 'raise' so far. Now I found several recommendations (for example here), to use 'raise' for exceptions to be caught, and 'fail' for serious errors which are not meant to be handled.

But does it really make sense? When you are writing a class or module, and cause a problem deep inside, which you signal by 'fail', your programming colleagues who are reviewing the code, might happily understand your intentions, but the person who is using my code will most likely not look at my code and has no way of knowing, whether the exception was caused by a 'raise' or by 'fail'. Hence, my careful usage of 'raise' or 'fail' can't have any influence on his decision, whether she should or should not handle it.

Could someone see flaws in my arguments? Or are there other criteria, which might me want to use 'fail' instead of 'raise'?

ndn ndn
Answer Source

use 'raise' for exceptions to be caught, and 'fail' for serious errors which are not meant to be handled

This is not what the official style guide or the link you provided say on the matter.

What is meant here is use raise only in rescue blocks. Aka use fail when you want to say something is failing and use raise when rethrowing an exception.

As for the "does it matter" part - it is not one of the most hardcore strictly followed rules, but you could make the same argument for any convention. You should follow in that order:

  1. Your project style guide
  2. Your company style guide
  3. The community style guide

Ideally, the three should be the same.

Update: As of this PR (December 2015), the convention is to always use raise.