J'ai reçu un programme ruby hérité de longue date, qui a de nombreuses occurrences de
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
partout.
Sans rechercher toutes les exceptions possibles, celles-ci pourraient être gérées (du moins pas immédiatement), j'aimerais toujours pouvoir l'arrêter parfois CtrlC.
Et j'aimerais le faire d'une manière qui ne fait qu'ajouter au code (donc je n'affecte pas le comportement existant, ou je rate une exception autrement capturée au milieu d'une exécution.)
[ CtrlCest SIGINT, ou SystemExit, qui semble être équivalent à SignalException.new("INT")
dans le système de gestion des exceptions de Ruby. class SignalException < Exception
, c'est pourquoi ce problème se pose.]
Le code que j'aimerais avoir écrit serait:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: Ce code fonctionne, tant que vous obtenez la classe de l'exception que vous souhaitez intercepter correctement. C'est soit SystemExit, Interrupt ou IRB :: Abort comme ci-dessous.