首页 > 解决方案 > 在红宝石救援后继续脚本

问题描述

我正在使用下面提到的 curl 解析 JSON 输出,但是no method error由于DESCRIPTION #{h["incident_updates"][1]["status"]. 因为 [["incident_updates"][1][status]]在某些情况下不存在,所以只有 的值[["incident_updates"][0][status]]是可用的。

(但其他迭代包含两者的值[0][status] [1][status]

因此,为了避免错误使用的rescue方法,但是在第一个错误之后阻止了错误但脚本没有执行(迭代在第一个错误本身时停止,脚本没有继续)。需要运行脚本直到迭代完成(即,虽然[1] [status]脚本中没有值应该运行来为下一个迭代元素带来值,因为下一个元素可能包含[1] [status])请对此提供帮助。提前致谢

def inc
  begin
    page3 = `curl https://api.statuspage.io/v1/pages/incidents.json?page=3 -H "Authorization: OAuth a8ef42"`
    JSON.parse(page3).each do |h|
      puts "ID : #{h["id"]} , CREATED AT : #{h["created_at"]} , LINK : #{h["shortlink"]} , ISSUE NAME : #{h["name"]} , DESCRIPTION #{h["incident_updates"][0]["status"]} , DESCRIPTION #{h["incident_updates"][1]["status"]}"
    end
  rescue NoMethodError => e
  end
end

标签: ruby-on-railsrubyruby-on-rails-3ruby-on-rails-4

解决方案


试试这个:

def inc
  page3 = `curl https://api.statuspage.io/v1/pages/incidents.json?page=3 -H "Authorization: OAuth a8ef42"`
  JSON.parse(page3).each do |h|
    begin
      puts "ID : #{h["id"]} , CREATED AT : #{h["created_at"]} , LINK : #{h["shortlink"]} , ISSUE NAME : #{h["name"]} , DESCRIPTION #{h["incident_updates"][0]["status"]} , DESCRIPTION #{h["incident_updates"][1]["status"]}"
    rescue NoMethodError => e
      puts e
    end
  end
end

解释:

每当捕获到异常时,它都会尝试退出发生异常的块。

在您之前的代码中,您在函数范围内处理它。因此,当在迭代中发生异常时,它退出循环,因为它没有在它发生的范围内(循环)内处理,并且在循环外被捕获,因为你在那里写了它(在环形)。

要继续迭代过程,您必须在它发生的地方处理它,以便系统必须知道它已被完美处理并可以执行下一次迭代。


推荐阅读