Использование блока восстановления для обработки ошибок кода ответа. Как я могу вывести код состояния на выходе вместо того, чтобы пропустить его?
У меня есть код для выполнения запросов 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
Как упоминалось в комментарии, вам также следует избегать использования "голого спасения" - спасайте более конкретную ошибку, а не любую ошибку вообще.