Além disso, as definições de classe, definições de módulo e (eu acho) do/ endliterais de bloco formam blocos de exceção implícitos.
Jörg W Mittag
você pode fazer def resgate e garantir o fim também?
Mohamed Hafez
Você também pode fazer def resgate garantir o fim também :-)
Antony
você pode usar mais de um resgate em sua defesa?
casado com Jane875
@ marriedjane875 sim, você pode usar vários resgates, seja explicitamente (cada cláusula / bloqueio de resgate em sua própria linha) como rescue TypeError; rescue NameError- ou você pode separar as classes de exceção por vírgula, por exemplorescue TypeError, NameError
chemturion
48
Você também pode resgatar inline:
1+"str"rescue"EXCEPTION!"
irá imprimir "EXCEÇÃO!" já que 'String não pode ser coagida em Fixnum'
Como você resgata e mostra a exceção backtrace inline?
Cyril Duchon-Doris
como retornar a exceção real?
user1735921
1
O resgate em linha não é uma boa prática, pois ele resgata StandardErrore todas as suas subclasses, como NameError- o que significa que até mesmo um erro de digitação em seu código não gerará um erro. Consulte Thoughtbot.com/blog/don-t-inline-rescue-in- rubi .
BrunoFacca
26
Estou usando muito a combinação def / rescue com as validações 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
Aqui, defcomo uma begindeclaração:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Respostas:
Um método "def" pode servir como uma declaração de "início":
fonte
do
/end
literais de bloco formam blocos de exceção implícitos.rescue TypeError; rescue NameError
- ou você pode separar as classes de exceção por vírgula, por exemplorescue TypeError, NameError
Você também pode resgatar inline:
irá imprimir "EXCEÇÃO!" já que 'String não pode ser coagida em Fixnum'
fonte
StandardError
e todas as suas subclasses, comoNameError
- o que significa que até mesmo um erro de digitação em seu código não gerará um erro. Consulte Thoughtbot.com/blog/don-t-inline-rescue-in- rubi .Estou usando muito a combinação def / rescue com as validações ActiveRecord:
Acho que esse é um código muito enxuto!
fonte
Exemplo:
Aqui,
def
como umabegin
declaração:fonte