Должен ли я спасать исключения внутри моего цикла, используя Ruby?

Я все больше и больше узнаю о рубине и написал скрипт, который время от времени истекает (выполняет несколько вызовов API).

Я знаю, что мне нужно rescue исключение примерно так:

rescue Timeout::Error => e
  # log #{e} for later, maybe
end

Мой вопрос в том, где я должен разместить этот блок rescue. Поскольку я делаю несколько вызовов API в нескольких циклах, нужно ли мне помещать этот блок в каждый цикл API? Я бы предпочел просто написать блок rescue один раз, например, в конце скрипта, и заставить его работать внутри каждого цикла скрипта. Я использую рубин 1.9.3.


person Luigi    schedule 28.08.2013    source источник
comment
возьми книгу Авди и иди через это...   -  person Arup Rakshit    schedule 28.08.2013
comment
Я думаю, что ответ заключается в том, что это зависит от того, насколько точно вы хотите определить, когда/где произошло исключение. Например, если вы хотите увидеть сообщение, указывающее, какой вызов API истек, вам нужно rescue для каждого из них.   -  person lurker    schedule 28.08.2013


Ответы (1)


В основном это зависит от того, что вы пытаетесь сделать с ошибками.

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

Если ошибка является "фатальной" и вы не можете (или не хотите) продолжать цикл, вы перехватываете ее снаружи.

person DaniDoni    schedule 28.08.2013
comment
Это имеет смысл. Я планирую около 10 000 электронных писем с помощью сценария, и важно, чтобы все 10 000 из них также попадали туда, куда им нужно. Я полагаю, что поймаю исключение вне цикла и заставлю его удалить все запланированные электронные письма, а затем я смогу перезапустить сценарий, чтобы перепланировать их все. Не кажется самой эффективной идеей, но пока этого достаточно. Спасибо за помощь! - person Luigi; 28.08.2013