我在 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 函数。
答案 0 :(得分:1)
当您使用字符串调用 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