Ответы:
Метод def может служить оператором начала:
def foo
...
rescue
...
end
do/ endблочные литералы образуют неявные блоки исключений.
rescue TypeError; rescue NameError- или вы можете запятую отдельных классов исключений, напримерrescue TypeError, NameError
Вы также можете спасти встроенные:
1 + "str" rescue "EXCEPTION!"
распечатает "ИСКЛЮЧЕНИЕ!" так как 'String не может быть преобразован в Fixnum'
StandardErrorи все его подклассы, например NameError- это означает, что даже опечатка в вашем коде не вызовет ошибку. См. Thinkbot.com/blog/don-t-inline-rescue-in- рубин .
Пример:
begin
# something which might raise an exception
rescue SomeExceptionClass => some_variable
# code that deals with some exception
ensure
# ensure that this code always runs
end
Вот defкак beginзаявление:
def
# something which might raise an exception
rescue SomeExceptionClass => some_variable
# code that deals with some exception
ensure
# ensure that this code always runs
end