我正在处理一个我未能使用raise
的应用程序,如下所示:
raise 'Some error happened!'
这导致显示难看的堆栈跟踪,因此我将代码调整为使用abort
,如下所示:
abort 'Some error happened!'
完美!现在我可以使用明确的消息退出并且没有堆栈跟踪。
问题出现了,因为在某种情况下我需要从这种情况中解救。我可以这样做:
begin
abort 'Some error happened!'
rescue SystemExit
puts 'Rescued'
end
puts 'Moving on...'
# Outputs:
# Some error happened!
# Rescued
# Moving on...
这具有显示中止消息的缺点,尽管被拯救并且挽救了相当模糊的错误。我真正想做的是这样的事情:
class MySuperFancyCustomError < StandardError
def initialize
super
abort 'Some error happened!'
end
end
begin
raise MySuperFancyCustomError
rescue MySuperFancyCustomError
puts 'Rescued'
end
puts 'Moving on...'
# Outputs:
# Some error happened!
但我还没有找到一种方法来设置它,以便我可以从中拯救它。我只需要它继续运行和输出:
Rescued
Moving on...
而不是失败:
Some error happened!
有没有人知道实现这一目标的优雅方式?
答案 0 :(得分:0)
我强烈建议不要使用abort
进行流量控制。相反,试试这个:
class CustomException < StandardError
end
class Example
def explode
raise CustomException, "Michael Bay here!"
end
end
begin
Example.new.explode
rescue CustomException => e
puts "This happened: %s" % e
end
在这里,您可以定义自己的异常类型,然后显式捕获它。
现在您将获得此输出,但您可以完全控制显示的方式,时间和时间:
This happened: Michael Bay here!