在 ruby​​ 中捕获异常

时间:2021-06-01 10:31:31

标签: ruby exception

我在 ruby​​ 中有一个函数

def mark_completed
      var_a = self.a
      self.check_something
    end

另一个功能是

def check_something(query = nil)
   raise 'Some_exception' if condition_a_satisfy?
      return true
 end

看,函数 check_something 引发异常,我想要的是:-“捕获异常并以某种方式返回 false” 我该怎么做?

注意: - 我无法更改我的 check_something 函数。

2 个答案:

答案 0 :(得分:1)

在#mark_completed 中拯救运行时错误

当您使用字符串调用 Kernel#raise 时,实际上是在提高 default exception,即 RuntimeError。您应该明确地捕获它,以避免无意中捕获其他从 StandardError 下降的 exceptions,或者通过拯救 Exception 来招致灾难,这几乎从来都不是一个好主意。例如:

def mark_completed
  self.check_something
rescue RuntimeError
  false
end

这将以一种可控的方式解决您提出的问题,但有意回避了引发异常是否是代码首先应该做的正确事情,或者是否可以进行其他重构的问题。

答案 1 :(得分:-1)

这确实涉及更改方法,但了解这一点仍然很有用。

嗨,我想您正在寻找 ruby​​ 中的 try 和 catch 语句。如果没有错误或异常,这将运行代码,如果有,它将运行指定的代码。

举个例子:

def check_something(query = nil)
begin
# to execute with no exceptions
rescue Exception
# to execute when you hit an exception
ensure
# to execute always
end
相关问题