gpt4 book ai didi

ruby - 你能用 ruby​​ 中的消息从特定错误中解救出来吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:19 25 4
gpt4 key购买 nike

我试图了解错误如何在 Ruby 中的类之间传播。到目前为止我有这个:

class User
def charge
puts "charging order soon"
raise RuntimeError.new("This is a runtime error")
rescue ArgumentError
puts "should never gets here"
end
end

class Runner
def run
begin
User.new.charge
rescue RuntimeError => e
puts e.message
end
end
end

Runner.new.run

当我运行它时,我得到了这似乎是正确的:

$ ruby errors.rb
charging order soon
This is a runtime error

在 runner 内部,我可以使用特定消息从 RuntimeError 中解救出来吗?如果我的应用程序引发了多个 RuntimeErrors,是否有任何方法可以仅针对具有特定消息的 RuntimeErrors 引发 Runner 的救援子句?

最佳答案

参见 https://stackoverflow.com/a/23771227/2981429

如果您在救援 block 内调用 raise,最后引发的异常将被重新引发。

在您的异常 block 中,您可以检查消息并选择是否重新引发:

begin
User.new.charge
rescue RuntimeError => e
case e.message
when "This is a runtime error"
# put your handler code here
else
raise # re-raise the last exception
end
end

但是,如果您的目标只是挽救您自己手动引发的错误,那么定义一个自定义错误类可能会更容易:

class MyError < StandardError; end

然后使用 raise MyError.new("message") 代替 raise RuntimeError.new("message"),并正常挽救它:

begin
User.new.charge
rescue MyError => e
# handler
end

这样您就不必担心您的救援会干扰内置异常。

关于ruby - 你能用 ruby​​ 中的消息从特定错误中解救出来吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43105871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com