Использование блока восстановления для обработки ошибок кода ответа. Как я могу вывести код состояния на выходе вместо того, чтобы пропустить его?

У меня есть код для выполнения запросов API через полный контакт для разрешения доменов для списка названий компаний и вывода их в таблицу csv. Я обнаружил, что код завершается всякий раз, когда встречается код ответа, отличный от 200 или 202.

У меня написан следующий блок спасения:

def get_parse_all
        ORG_ARRAY.each do |company_name|
            begin
                org_info = get_org_info(company_name)
            rescue
                next
            end
            parse_org_info(org_info)
        end
    end

Проблема в том, что я не могу понять, как по-прежнему включать пропущенные названия компаний (из-за неправильного кода ответа) в выводе. Я получаю список успешных звонков, но не могу сказать, какие из них были пропущены и почему.

Я пытался puts "error"перед следующим, но он не отображается в выходном CSV. И если я уберу следующий, я получуnil:NilClass (NoMethodError)

Я прочитал некоторую документацию, но я новичок в этом, и я застрял. Если бы кто-то мог указать мне правильное направление, я был бы очень признателен!

Спасибо заранее за любую помощь:)

1 ответ

В этом случае похоже, что вы хотите перебрать массив и преобразовать каждый элемент в другое значение. Результатом будет еще один массив, и каждый элемент в нем будет либоorg_info или ошибка.

Для этого вы должны использовать map вместо того each. Помни этоeachне возвращает результат блока, напримерORG_ARRAY.each doбудет всегда возвращатьORG_ARRAY независимо от того, что вы делаете в блоке.

def get_parse_all
  ORG_ARRAY.map do |company_name|
    begin
      parse_org_info(get_org_info(company_name))
    rescue => e
      e
    end
  end
end

Как упоминалось в комментарии, вам также следует избегать использования "голого спасения" - спасайте более конкретную ошибку, а не любую ошибку вообще.

Другие вопросы по тегам