在救援中输出错误(Ruby/Rails)

ove*_*one 52 ruby ruby-on-rails exception

只是一个简单的问题.我在文档中找不到它.

如果我使用标准begin ... rescue,如何将所有错误或堆栈跟踪打印到救援中?

例如:

begin 
    do x
rescue
    puts errors
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Pet*_*own 79

我知道至少有两种方法可以解决错误.第一个是使用全局变量:$!始终设置为发生的最后一个错误.第二个是在救援时明确捕获错误:

begin
  # do something that fails...
rescue => error
  # error and $! are equivalent here
end
Run Code Online (Sandbox Code Playgroud)

任何一个都可以使用以下任一方法检查或打印回溯:

$!.backtrace # => array of backtrace steps
error.backtrace # => same error
Run Code Online (Sandbox Code Playgroud)

  • 并且`$!`是线程本地的,因此使用它是完全安全的 (2认同)