如何使用backtrace将ruby异常格式化为字符串

时间:2012-11-09 16:10:27

标签: ruby

我有一个例外e,我想将其转换为标准红宝石输出完全相同的字符串{ {1}}异常未被捕获时。

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

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

2 个答案:

答案 0 :(得分:17)

这将是相同的。

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}"}

答案 1 :(得分:0)

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

puts "#{e.backtrace.first}: #{e.message} (#{e.class})\n\t" + e.backtrace.join("\n\t")