Yakalama-c Ctrl ruby
Uzun süren bir miras geçti ben sayısız tanımında olan ruby programı
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
o boyunca.
Her işleme olabilir bu her olası Durum İzleme olmadan (en azından hemen), hala zaman zaman aşağı kes için mümkün olmak istiyorumCtrlC.
Ve bu yüzden tek kod ekleyen bir yol (mevcut davranışını etkiler, ya da bir çalışma ortasında yakaladı aksi bir durum özlemiyorum.) yapmak istiyorum
[CtrlCSignalException.new("INT")
eşdeğer olarak görünen SIGINT, ya SystemExit, Ruby'nin özel durum işleme sistemi. Bu sorun çıkıyor ediliyor class SignalException < Exception
,.]
Yazılı istiyorum kod şöyle olacaktır:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDİT: Bu kod çalışır, sürece tuzak düzeltmek istediğiniz özel sınıf olsun. Ya SystemExit, Kesme, ya da IRB::aşağıda İptal gibi.
CEVAP
Sorun Ruby bir program sona erdiğinde, yani yükselterek yapmasıdırSystemExit. Control-C geldiğinde, yükseltirKesme. Her iki yanaSystemExitveKesmekaynaklanıyorÖzel durumözel durum işleme onun parça çıkmak veya kesme durduruluyor. İşte düzeltme:
Her yerde yapabilirsiniz, değiştirin
rescue Exception => e
# ...
end
için
rescue StandardError => e
# ...
end
bu StandardError, yeniden ayağa kaldırmak için özel değiştiremezsin:
rescue Exception => e
# ...
raise
end
veya, en azından, yeniden yükseltmek SystemExit ve Kesme
rescue SystemExit, Interrupt
raise
rescue Exception => e
#...
end
Yaptığınız tüm özel durumlar sağlanmalıStandardErrordeğilÖzel durum.
En iyi çapraz tarayıcı yakalama yöntem...
Ne kadar Sekme yakalama ve Ctrl WPF Ta...
Golang: Ctrl C sinyal yakalama ve temi...
Python shell komutu çalıştırma ve çıkı...
Nasıl Ctrl D Yüce Metin 2'de çoklu seç...