【发布时间】:2014-03-06 03:02:10
【问题描述】:
我正在使用经常超时的 API 运行脚本。发生这种情况时,我使用begin/rescue 块将其发送到redo,但我想在运行redo 命令之前将发生的情况记录到命令行。
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,根据我的导师的说法,这无论如何都不是 kosher。
【问题讨论】:
-
你的代码中
redo的目的是什么,我没有得到你要找的东西 -
大多数情况下,我能够以发生错误的给定 id 重新开始该过程并且它可以工作。因此,我试图在没有脚本中断的情况下做到这一点。在某些情况下,不可避免地会导致错误的 API 命令本身,所以我想知道脚本何时卡在同一个 id 上。
-
我想强制救援块运行多行代码 - 有什么问题?你的意思是最后一行没有执行?
标签: ruby eval next rescue redo