Вы можете использовать спасение только в двух случаях:
Внутри блока begin ... end
begin
raise
rescue
nil
end
как модификатор оператора
i = raise rescue nil
Функции, модули и тела классов (благодаря Jörg) являются неявными begin...end
блоками, поэтому вы можете спасаться в любой функции без явного begin
/ end
.
def foo
raise
rescue
nil
end
Форма блока принимает необязательный список параметров, определяющих, какие исключения (и потомки) до rescue
:
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
end
Если вызывать inline как модификатор оператора или без аргумента в блоке begin
/ end
, функция спасения перехватит StandardError
и его потомков .
Вот документация 1.9 по rescue
.