Мне была передана давно запущенная рубиновая программа, которая имеет многочисленные вхождения
begin
#dosomething
rescue Exception => e
#halt the exception progress
end
во всем этом.
Не отслеживая каждое возможное исключение, каждое из них может обрабатываться (по крайней мере, не сразу), я все равно хотел бы время от времени закрывать его с помощью Ctrl C.
И я хотел бы сделать это таким образом, который добавит только код (поэтому я не влияю на существующее поведение или не пропущу исключение, исключенное иначе в середине прогона.)
[Ctrl C - это SIGINT или SystemExit, который, как представляется, эквивалентен SignalException.new("INT")
в системе обработки исключений Ruby. class SignalException < Exception
, поэтому эта проблема возникает.]
Код, который я хотел бы написать, будет:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception progress
end
РЕДАКТИРОВАТЬ: Этот код работает, если вы получите класс исключения, который вы хотите уловить. Это либо SystemExit, Interrupt, либо IRB:: Abort, как показано ниже.