如何从 Ruby 中的救援子句恢复?

Hir*_*ori 2 ruby exception rescue

如何在 Ruby 中将恢复写入循环?这是示例代码。

#!/usr/bin/ruby
#

a = [1,2,3,4,5]

begin
    a.each{|i|
        puts i
    if( i==4 ) then raise StandardError end # Dummy exception case
    }
rescue =>e
  # Do error handling here
  next # Resume into the next item in 'begin' clause
end
Run Code Online (Sandbox Code Playgroud)

但是,运行时,Ruby返回错误消息

test1.rb:13: Invalid next
test1.rb: compile error (SyntaxError)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Ruby 1.9.3。

fal*_*tru 5

您应该使用retry而不是next; 但这会导致无限循环(retry从头开始重新启动begin

a = [1,2,3,4,5]
begin
    a.each{|i|
        puts i
        if  i == 4 then raise StandardError end
    }
rescue =>e
    retry # <----
end
Run Code Online (Sandbox Code Playgroud)

如果您想跳过一个项目并继续下一个项目,请捕获循环内的异常。

a = [1,2,3,4,5]
a.each{|i|
    begin
        puts i
        if  i == 4 then raise StandardError end
    rescue => e
    end
}
Run Code Online (Sandbox Code Playgroud)