Ruby救援并重试特定的代码块

前端之家收集整理的这篇文章主要介绍了Ruby救援并重试特定的代码块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的脚本中有以下代码
begin
    #Loop to create 1000 emails...
    #Loop to send 1000 emails...

  rescue Timeout::Error => e
    retry_attempts += 1
    if retry_attempts < 10
      retry
    else
      puts "Timeout error,deleting emails...".red
      logs.puts("Rescued a timeout error...#{e}")
      email_ids_all.each do |email_delete|
        #delete all email...
      end

我的问题是重试实际上是“重试”.如果脚本已经在一个循环中生成了1000封电子邮件,并在另一个循环中发送了999封电子邮件,然后在发送第1000封电子邮件时超时 – 它是否会重试它遇到错误的特定代码行,是否会启动循环使用第1000个电子邮件,它会启动整个循环,还是从脚本开始运行两个循环开始?

我正在使用ruby 1.9.3.

解决方法

重试将执行整个开始块,因此在您的情况下,所有电子邮件循环将再次运行.

这是一个快速示例,它将连续打印1到7的整数(以CTRL-C结束,因为它将无限循环):

begin
  (1..10).each do |x|
    puts x
    if x > 6
      STDIN.gets # press enter to do another iteration
      raise ArgumentException
    end
  end
rescue
  retry # loop will restart from 1
end

猜你在找的Ruby相关文章