在 ruby 救援后继续脚本

Continue script after rescue in ruby

我正在使用下面提到的 curl 解析 JSON 输出, 但是,由于 DESCRIPTION #{h["incident_updates"][1]["status"] ,我在解析输出时得到 no method error 。因为 [["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

试试这个:

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

解释:

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

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

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