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