Мне передали давно запущенную унаследованную программу ruby, которая имеет многочисленные случаи
begin
#dosomething
rescue Exception => e
#halt the exception's 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's progress
end
РЕДАКТИРОВАТЬ: Этот код работает, пока вы получаете класс исключения, которое вы хотите перехватить правильно. Это либо SystemExit, либо Interrupt, либо IRB :: Abort, как показано ниже.