在红宝石救援后继续执行脚本

时间:2018-10-08 05:51:19

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

我正在使用下面提到的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

1 个答案:

答案 0 :(得分:2)

尝试一下:

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

说明:

无论何时捕获到异常,它都会尝试退出发生异常的块。

在先前的代码中,您正在函数范围内对其进行处理。因此,当迭代中发生异常时,它会退出循环,这是因为未在异常发生的范围内对其进行处理(循环),而是因为您在此处编写了异常而将其捕获到了循环外部(环)。

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