【问题标题】:Non-fatal rescue in RailsRails 中的非致命救援
【发布时间】:2014-03-12 23:43:19
【问题描述】:

我正在尝试运行有时可能会失败的命令。当它失败时,它会抛出一个异常。

我希望它只是安静地记录错误并继续执行它下面的下一行,而不是中止并进入“救援”块。我应该如何处理?

我目前的代码如下:

  rescue_from 'Gibbon::MailChimpError' do |exception|
    logger.error("MAILCHIMP: #{exception}")
  end

当我调用 Mailchimp API 时,有时会出现错误,这会中断我的应用程序流程。我只是希望它继续执行,就好像什么都没发生一样,并注意日志中有错误。

【问题讨论】:

  • 什么rescue 块?你的代码在哪里?
  • 用上面的代码更新了。
  • @cjm2671:请使用实际代码更新您的问题。您只向我们展示了救援块。不是导致异常的实际调用
  • 我不确定这是否相关(粘贴很多,因此错过了);我想要的是每当一行代码抛出这个异常时,我只想让它像往常一样继续执行(调试中的“跳过”)

标签: ruby-on-rails ruby rescue


【解决方案1】:

这样的事情怎么样:

def rescuing(&block)
  begin
    yield
  rescue NameError => e
    puts "(Just rescued: #{e.inspect})"
  end
end

rescuing do
  puts "This is dangerous"
  raise NameError
end

puts "... but I'm still alive"

显然,您必须将 NameError 替换为您希望受到保护的异常。

【讨论】:

  • 哦,这很聪明。我刚刚对其进行了测试,并且效果很好!谢谢!我不认为有一种性感的方式来包装它,这样你就可以做类似 this_is_dangerous.try 的事情(只是为了让代码更干净)
  • 您总是可以使用其他块表示法:rescuing { puts "This is dangerous" }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
相关资源
最近更新 更多