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