ฉันผ่านโปรแกรมทับทิมที่ใช้งานมายาวนานซึ่งมีเหตุการณ์ต่างๆเกิดขึ้นมากมาย
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 ดังต่อไปนี้