最佳答案
我通过了一个长期运行的遗留 Ruby 程序,它有许多出现的
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
throughout it.
在不追踪每一个可能的异常的情况下,这些异常都可以被处理(至少不是立即处理) ,我仍然希望有时能够用 CtrlC关闭它。
我希望这样做的方式只是增加代码(这样我就不会影响现有的行为,或者在运行的过程中错过一个异常)
[ CtrlC是 SIGINT,或 SystemExit,它似乎等同于 Ruby 异常处理系统中的 SignalException.new("INT")
。class SignalException < Exception
,这就是为什么会出现这个问题。]
我想写的代码是:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
编辑: 这段代码可以工作,只要你得到了你想要捕获正确的异常类。这是 SystemExit、 Interrupt 或 IRB: : Abort,如下所示。