我正在编写一个脚本,该脚本可能会在程序的许多不同点正常退出。该脚本当前始终在确保块中向 STDOUT 输出一条消息,如下所示:
begin
exit
ensure
puts "my message"
end
问题是,如果脚本崩溃,消息无论如何都会输出,然后是错误消息。我想要做的是只在退出 0 时输出消息,如下所示:
begin
exit 1
ensure
if is_this_a_normal_exit?()
puts 'my messsage'
end
end
有办法吗?
当调用时
exit
,通常是这样的Kernel#exit
。此方法基本上会引发SystemExit
异常,最终可能导致程序退出。您可以挽救这个异常,也可以在确保块中检查它:
请注意,程序退出还有其他可能的原因,其中一些你根本无法捕捉(例如,当调用时
Kernel#exit!
,或者当你或其他进程发送信号(如SIGKILL
终止程序)时)。此外,当使用线程时,SystemExit
异常可能不会传播到主线程。