In ruby to catch an error one uses the rescue
statement. generally this statement occurs between begin
and end
. One can also use a rescue
statement as part of a block (do ... end
) or a method (def ... end
). My question is what other structures (loop, while, if, ...) if any will rescue nest within?
You can only use rescue in two cases:
Within a begin ... end
block
begin raise rescue nil end
As a statement modifier
i = raise rescue nil
Function, module, and class bodies (thanks Jörg) are implicit begin...end
blocks, so you can rescue within any function without an explicit begin
/end
.
def foo raise rescue nil end
The block form takes an optional list of parameters, specifying which exceptions (and descendants) to rescue
:
begin eval string rescue SyntaxError, NameError => boom print "String doesn't compile: " + boom rescue StandardError => bang print "Error running script: " + bang end
If called inline as a statement modifier, or without argument within a begin
/end
block, rescue will catch StandardError
and its descendants.
Here's the 1.9 documentation on rescue
.
As said in recent comment, response has changed since Ruby 2.5.
do ... end
blocks are now implicit begin ... end
blocks; like module, class and method bodies.
In-line blocks {...}
still can't.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With