Capturando Ctrl-c em ruby
Foi-me aprovado um programa ruby legado de longa duração, que tem inúmeras ocorrências de
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
ao longo dele.
Sem rastrear todas as exceções possíveis que elas possam estar lidando (pelo menos não imediatamente), eu ainda gostaria de poder desligá-las às vezes comCtrlC.
E eu gostaria de fazê-lo de uma maneira que apenas adicione 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 aSignalException.new("INT")
no sistema de tratamento de exceções do Ruby.class SignalException < Exception
, e é por isso que esse problema surge.]
O código que eu gostaria de escrever seria:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: Este código funciona, desde que você obtenha a classe da exceção que deseja capturar correta. Isso é SystemExit, Interrupt ou IRB :: Abort como abaixo.