Eu fui aprovado em um programa de ruby antigo, que tem inúmeras ocorrências de
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
em todo ele.
Sem rastrear todas as exceções possíveis com que cada um deles poderia lidar (pelo menos não imediatamente), eu ainda gostaria de poder desligá-lo às vezes com CtrlC.
E eu gostaria de fazer isso de uma forma que apenas acrescente ao código (para não afetar o comportamento existente, ou perder uma exceção detectada no meio de uma execução).
[ CtrlCé SIGINT, ou SystemExit, que parece ser equivalente ao SignalException.new("INT")
sistema de tratamento de exceções do Ruby. class SignalException < Exception
, é por isso que esse problema surge.]
O código que eu gostaria de ter escrito seria:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: Este código funciona, contanto que você obtenha a classe da exceção que deseja corrigir com interceptação. Pode ser SystemExit, Interrupt ou IRB :: Abort conforme abaixo.