Продолжить скрипт после спасения в ruby - PullRequest
0 голосов
/ 08 октября 2018

Я анализирую вывод в формате 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 голосов
/ 08 октября 2018

Попробуйте это:

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

Объяснение:

Всякий раз, когда перехватывается исключение, он пытается выйти из блока, в котором произошло исключение.

В предыдущем коде вы обрабатываете его в рамках функции.Итак, когда исключение происходило в итерации, оно выходило из цикла, потому что оно не было обработано внутри области, в которой оно происходило (цикл), и было перехвачено прямо вне цикла, потому что вы написали его там (внепетля).

Чтобы продолжить процесс итерации, вы должны обработать его там, где он происходил, чтобы система знала, что он был обработан идеально, и она может выполнить следующую итерацию.

...