ruby-on-rails - 在红宝石救援后继续脚本
问题描述
我正在使用下面提到的 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
解决方案
试试这个:
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
解释:
每当捕获到异常时,它都会尝试退出发生异常的块。
在您之前的代码中,您在函数范围内处理它。因此,当在迭代中发生异常时,它退出循环,因为它没有在它发生的范围内(循环)内处理,并且在循环外被捕获,因为你在那里写了它(在环形)。
要继续迭代过程,您必须在它发生的地方处理它,以便系统必须知道它已被完美处理并可以执行下一次迭代。
推荐阅读
- javascript - 更新历史状态并重定向
- powershell - Powershell 将 XML here-string 插入 xml 文档
- sql - SQL 保修每年的总财务风险
- google-cloud-platform - 使用 Airflow Operator 发送 Gmail 时附加 Google 云存储文件
- node.js - 如何将目录中的所有图像文件读取到前端
- django - 视图正在网络预览选项卡 Django 中呈现
- javascript - 将 TypeScript 用于 Angular 的 WebComponent
- python - UNet 损失为 NaN + UserWarning:警告:将屏蔽元素转换为 nan
- css - 焦点不适用于输入并且 !important 不做任何事情
- java - 如何为链表中的两个节点实现 compareTo()