Przekazano mi długo działający, starszy program rubinowy, który ma wiele wystąpień
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
przez cały czas.
Bez śledzenia każdego możliwego wyjątku, który każdy z nich mógłby obsługiwać (przynajmniej nie od razu), nadal chciałbym móc czasami go wyłączyć CtrlC.
Chciałbym to zrobić w sposób, który tylko dodaje do kodu (więc nie wpływam na istniejące zachowanie ani nie pomijam wychwyconego w inny sposób wyjątku w trakcie wykonywania).
[ CtrlCto SIGINT lub SystemExit, co wydaje się być równoważne z SignalException.new("INT")
systemem obsługi wyjątków Rubiego. class SignalException < Exception
, dlatego pojawia się ten problem.]
Kod, który chciałbym napisać, wyglądałby tak:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDYCJA: Ten kod działa, o ile uzyskasz klasę wyjątku, który chcesz poprawnie przechwycić. To jest SystemExit, Interrupt lub IRB :: Abort, jak poniżej.