使用Ruby全局变量进行异常$!在轨道上

时间:2015-12-10 04:58:32

标签: ruby-on-rails ruby global-variables

我试图通过使用ruby全局变量$!来从我的rails应用程序访问最后一个exception_message,但它在nil回来,尽管在调用变量之前发生了多个异常。这不适用于铁轨吗?是否有另一种方法可以访问应用程序中引发的最后一个异常?

2 个答案:

答案 0 :(得分:1)

原来是$!还不是全球性的。它只在异常的调用堆栈中起作用-我想这是有道理的。

https://www.honeybadger.io/blog/working-with-ruby-exceptions-outside-of-the-rescue-block/

“这意味着$!在像IRB这样的shell中是非常无用的。通常在IRB中,我会运行一个方法并获取一个异常。有时我想获得该异常对象。但是$!对此不起作用。”

答案 1 :(得分:0)

我不确定为什么$!总是会返回nil。正如我在上面的评论中所写,0 / 0 rescue $!有效,但我似乎无法在任何其他环境中使用它。

在Ruby程序中访问异常的一种方法是在=>之后使用rescue,如下所示:

[24] pry(main)> begin
[24] pry(main)*   undefined_variable
[24] pry(main)* rescue => e
[24] pry(main)*   puts e
[24] pry(main)* end
undefined local variable or method `undefined_variable' for main:Object
=> nil