Ruby 中未处理的异常
Unhandled Exceptions in Ruby
我是第一次参与 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
块中做任何你想做的事情。任何未捕获的异常都会自动冒泡到您的顶层。
这必须是您的 Ruby 应用程序的顶级代码。
与您在 Ruby 中谈论的内容最接近的是您可以定义的 at_exit
处理程序,但它在每个退出场景中运行,而不仅仅是未捕获的异常。
我是第一次参与 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
块中做任何你想做的事情。任何未捕获的异常都会自动冒泡到您的顶层。
这必须是您的 Ruby 应用程序的顶级代码。
与您在 Ruby 中谈论的内容最接近的是您可以定义的 at_exit
处理程序,但它在每个退出场景中运行,而不仅仅是未捕获的异常。