【问题标题】:Catch exception in ruby在 ruby​​ 中捕获异常
【发布时间】:2021-08-19 13:19:34
【问题描述】:

我在 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 功能。

【问题讨论】:

  • 那么,在这种情况下,rescuemark_completed 中。
  • 可以直接调用condition_a_satisfy?吗?

标签: ruby exception


【解决方案1】:

抢救#mark_completed 中的 RuntimeError

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

def mark_completed
  self.check_something
rescue RuntimeError
  false
end

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

【讨论】:

    【解决方案2】:

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

    您好,我认为您正在寻找 ruby​​ 中的 try and 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
    

    【讨论】:

    • 不过,你不应该拯救Exception。这太笼统了。
    • 另外,这不能称为try/catch。红宝石中没有try。有catch,但它完全做了别的事情。
    • 谢谢哥们!我是 ruby​​ 和编程的初学者,请建议我从哪里可以学习 catch 和 try 以及它们的意义..
    • @AnkitKumar Try/Catch(我称它为来自未实现救援确保的语言),基本上是一种代码块,它会发现错误,如果你运行某些代码发现错误,如果没有发现错误,则运行某些代码。这很有用,因为您可以让您的程序在遇到错误时不停止,但如果您这样做,则运行某些代码。这是一个关于 ruby​​ try/catch 的网站:stackify.com/rescue-exceptions-ruby
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多