【问题标题】:Using Ruby Global Variable for Exception $! on rails使用 Ruby 全局变量处理异常 $!在铁轨上
【发布时间】:2015-12-10 04:58:32
【问题描述】:

我正在尝试使用 ruby​​ 全局变量 $! 从我的 rails 应用程序中访问最后一个 exception_message,但尽管在调用该变量之前发生了多个异常,但它返回为零。这在rails中不起作用吗?还有其他方法可以访问应用程序中引发的最后一个异常吗?

【问题讨论】:

  • 这似乎有效:0 / 0 rescue $!

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


【解决方案1】:

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

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

“这意味着 $! 在像 IRB 这样的 shell 中毫无用处。通常在 IRB 中,我会运行一个方法并获得一个异常。有时我想获得那个异常对象。但是 $!不适合这个。”

【讨论】:

    【解决方案2】:

    我不确定为什么 $! 总是返回 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
    

    【讨论】:

    • 谢谢@sixty4bit。我可以让它在救援中工作,但不能在其他任何地方工作。就像您指出的那样,在其他任何地方它都返回零。有什么方法可以从救援外部检索最后一个异常?
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2011-09-29
    • 2011-06-17
    相关资源
    最近更新 更多