Я запускаю скрипт с API, который часто не хватает времени. Я использую блоки begin/rescue
, чтобы получить его до redo
, когда это произойдет, но вы хотите записать, что происходит с командной строкой, прежде чем я запустил команду redo
.ruby rescue block - ответьте не только на одну команду
begin
#...api query...
rescue ErrorClass
puts("retrying #{id}") && redo
end
К сожалению, указанный выше сценарий не работает. Выполняется только первая команда.
Я хотел бы, чтобы заставить спасательную блок для запуска нескольких строк кода, например, так:
begin
# api query
rescue ErrorClass do ###or:# rescue ErrorClass do |e|
puts "retrying #{id}"
redo
end
но те не работают либо.
Я имел счастье создавая отдельный метод для запуска, как так:
def example
id = 34314
begin
5/0
rescue ZeroDivisionError
eval(handle_zerodiv_error(id))
end
end
def handle_zerodiv_error(id)
puts "retrying #{id}"
"redo"
end
... что на самом деле работает. Но для этого требуется слишком много строк кода, и он использует eval, который не является кошерным каким-либо образом в соответствии с моим наставником (ами).
Какова цель 'redo' в коде, я не получаю то, что вы ищете –
Большую часть времени я нахожусь в состоянии начать процесс снова при этом указанном id, что ошибка произошла и работает. Таким образом, я пытаюсь сделать это без нарушения сценария. Там неизбежно будут некоторые случаи, когда сама команда API вызывает ошибку, поэтому я хочу знать, когда скрипт застревает на одном и том же идентификаторе. –
* Я хотел бы заставить блок спасения запустить несколько строк кода * - в чем проблема? Вы имеете в виду последнюю строку, не выполняющую? –