我正在使用下面提到的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
答案 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
说明:
无论何时捕获到异常,它都会尝试退出发生异常的块。
在先前的代码中,您正在函数范围内对其进行处理。因此,当迭代中发生异常时,它会退出循环,这是因为未在异常发生的范围内对其进行处理(循环),而是因为您在此处编写了异常而将其捕获到了循环外部(环)。
要继续执行迭代过程,必须在发生的地方进行处理,以便系统必须知道它已被完美处理,并且可以执行下一次迭代。