Кроме того, определения классов, определения модулей и (я думаю) do/ endблочные литералы образуют неявные блоки исключений.
Jörg W Mittag,
Можете ли вы сделать спасение def, чтобы гарантировать конец?
Мохамед Хафез
Вы можете абсолютно точно сделать спасение def, гарантировать конец :-)
Энтони
вы можете использовать более одного спасения в вашем def?
женат
@ marriedjane875 да , вы можете использовать несколько выручает, либо в явном виде (каждый пункт спасательного / блок на своей собственной линии) , как rescue TypeError; rescue NameError- или вы можете запятую отдельных классов исключений, напримерrescue TypeError, NameError
chemturion
48
Вы также можете спасти встроенные:
1+"str"rescue"EXCEPTION!"
распечатает "ИСКЛЮЧЕНИЕ!" так как 'String не может быть преобразован в Fixnum'
Как вы спасаете и показываете трассировку исключения в строке?
Сирил Дюшон-Дорис
как вернуть фактическое исключение?
user1735921
1
Встроенное спасение не является хорошей практикой, поскольку оно спасает StandardErrorи все его подклассы, например NameError- это означает, что даже опечатка в вашем коде не вызовет ошибку. См. Thinkbot.com/blog/don-t-inline-rescue-in- рубин .
BrunoFacca
26
Я часто использую комбинацию def / rescue с проверками ActiveRecord:
def create
@person=Person.new(params[:person])@person.save!
redirect_to @personrescueActiveRecord::RecordInvalid
render :action =>:new
end
begin# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Вот defкак beginзаявление:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Ответы:
Метод def может служить оператором начала:
источник
do
/end
блочные литералы образуют неявные блоки исключений.rescue TypeError; rescue NameError
- или вы можете запятую отдельных классов исключений, напримерrescue TypeError, NameError
Вы также можете спасти встроенные:
распечатает "ИСКЛЮЧЕНИЕ!" так как 'String не может быть преобразован в Fixnum'
источник
StandardError
и все его подклассы, напримерNameError
- это означает, что даже опечатка в вашем коде не вызовет ошибку. См. Thinkbot.com/blog/don-t-inline-rescue-in- рубин .Я часто использую комбинацию def / rescue с проверками ActiveRecord:
Я считаю, что это очень простой код!
источник
Пример:
Вот
def
какbegin
заявление:источник