12

我有一个异常e,我想将其转换为一个字符串,该字符串与未捕获异常时的标准ruby​​ 输出完全相同。stderr

初始代码给了我错误的堆栈跟踪顺序,并且缩进不正确。

我不想编写自己的代码,而是希望看到一些“oneliner”。你怎么做到这一点?

4

3 回答 3

20

这将是相同的。

puts "#{$@.first}: #{$!.message} (#{$!.class})", $@.drop(1).map{|s| "\t#{s}"}

或者,使用e

puts "#{e.backtrace.first}: #{e.message} (#{e.class})", e.backtrace.drop(1).map{|s| "\t#{s}"}
于 2012-11-09T16:19:23.973 回答
0

如果您想记录为单个字符串,而不仅仅是输出,您可以这样做:

puts "#{e.backtrace.first}: #{e.message} (#{e.class})\n\t" + e.backtrace.join("\n\t")
于 2021-06-29T05:39:42.000 回答
0

我猜这在 Ruby 2 之前是不可能的,但现在这是核心中的一个函数:

e.full_message

如果您不想在输出中使用颜色代码:

e.full_message(highlight: false)

https://ruby-doc.org/core-2.5.1/Exception.html#method-i-full_message

于 2021-09-30T23:25:37.303 回答