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