我是第一次从事 ruby 项目。除了我希望能够注册一个未处理的异常处理程序之外,我已经得到了我需要的一切,这样我就可以在发生崩溃时触发一些东西,而这不是由救援处理的,但我看不出这是否可能。
我已经完成了很多其他语言,比如在 Python 中我已经完成了以下内容:
sys.excepthook = MyClass._unhandledCrashHandler
我在 Ruby 中找不到任何等效项来执行此操作。这可能吗?
应该提到,我正在编写一个 Ruby 库,所以我的想法是当主 ruby 应用程序初始化我的库时,库设置已处理的异常处理程序,然后如果主应用程序崩溃,库就会崩溃。这是我在 python 和许多其他语言中所做的,没有问题,但在 Ruby 中看不到这样做的任何方式。
最佳答案
Ruby 没有通用处理程序,而是您包装可能产生异常的代码。例如:
begin
# ... Do stuff
rescue => e
$stderr.puts("[%s] %s" % [ e.class, e ])
$stderr.puts(e.backtrace.join("\n"))
end
拯救所有标准异常并显示一些诊断输出的地方。您可以在 rescue
block 中做任何您想做的事情。任何未捕获的异常都会自动冒泡到您的顶层。
这必须是您的 Ruby 应用程序的顶级代码。
与您在 Ruby 中谈论的内容最接近的是您可以定义的 at_exit
处理程序,但它在每个退出场景中运行,而不仅仅是未捕获的异常。
关于ruby - Ruby 中未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124898/