Tôi đã được thông qua một chương trình ruby kế thừa đang chạy lâu dài, có rất nhiều lần xuất hiện
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
trong suốt nó.
Nếu không theo dõi mọi ngoại lệ có thể xảy ra mà mỗi ngoại lệ này có thể được xử lý (ít nhất là không phải ngay lập tức), tôi vẫn muốn có thể tắt nó đôi khi CtrlC.
Và tôi muốn làm như vậy theo cách chỉ thêm vào mã (vì vậy tôi không ảnh hưởng đến hành vi hiện có hoặc bỏ lỡ một ngoại lệ bị bắt gặp khác khi đang chạy.)
[ CtrlClà SIGINT, hoặc SystemExit, có vẻ tương đương với SignalException.new("INT")
trong hệ thống xử lý ngoại lệ của Ruby. class SignalException < Exception
, đó là lý do tại sao vấn đề này xuất hiện.]
Đoạn mã tôi muốn viết sẽ là:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
CHỈNH SỬA: Mã này hoạt động, miễn là bạn nhận được đúng lớp của ngoại lệ bạn muốn bẫy. Đó là SystemExit, Interrupt hoặc IRB :: Abort như bên dưới.