Ruby on rails 在ruby中执行rescue后继续脚本
我使用下面提到的curl解析JSON输出, 但是,由于Ruby on rails 在ruby中执行rescue后继续脚本,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我使用下面提到的curl解析JSON输出, 但是,由于说明{h[“事件更新”][1][“状态”],我在解析输出时没有方法错误。因为[“事件更新”][1][status]在某些情况下不存在,所以只有[“事件更新”][0][status]]的值可用 (但其他迭代包含[0][status] [1][status]) 因此,为了避免使用rescue方法时出现错误,虽然防止了错误,但在第一个错误后脚本不会执行(第一个错误本身停止了迭代,脚本不会继续)。需要运行脚本,直到迭代完成(即,[1][status]
说明{h[“事件更新”][1][“状态”]
,我在解析输出时没有方法错误。因为[“事件更新”][1][status]
在某些情况下不存在,所以只有[“事件更新”][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
说明:
每当捕获到异常时,它都会尝试退出发生异常的块
在以前的代码中,您是在函数的作用域中处理它的。因此,当异常在迭代中发生时,它会退出循环,因为它没有在发生的作用域(循环)内处理,而在循环的正外部被捕获,因为您在那里编写了它(循环外部)
要继续迭代过程,您必须在迭代发生的地方处理它,以便系统必须知道它已被完美地处理,并且可以执行下一次迭代。尝试以下方法:
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
说明:
每当捕获到异常时,它都会尝试退出发生异常的块
在以前的代码中,您是在函数的作用域中处理它的。因此,当异常在迭代中发生时,它会退出循环,因为它没有在发生的作用域(循环)内处理,而在循环的正外部被捕获,因为您在那里编写了它(循环外部)
要继续迭代过程,您必须在它发生的地方处理它,以便系统必须知道它被完美地处理,并且可以执行下一次迭代。它工作了,谢谢..似乎只有代码应该在
begin
下,尽管我们在迭代?它工作了,谢谢..似乎只有代码应该在begin
虽然我们正在迭代?而不是捕获异常,但您可能希望改用(自Ruby 2.3起提供)。@HolgerJust谢谢,我也会研究它。您可能希望改用(自Ruby 2.3起提供),而不是捕获异常。@HolgerJust谢谢,我也会研究它。