ruby - 在异常之后使脚本继续执行下一个语句并完成救援

时间:2017-09-13 10:01:25

标签: ruby-on-rails ruby exception-handling

将我的代码视为

begin
  aa = 20
  bb = 0
  puts 'before exception'
  c = aa / bb
  puts 'after exception'
rescue
  puts 'in rescue'
end

它将输出显示为

before exception
in rescue

如果我想在例外后打印'同样。我该怎么做?

我需要在异常引发后继续下一个语句。请帮助我。

编辑:我刚刚提到了上面的示例代码。考虑一下,我可能不知道会发生什么地方和什么异常,它可能会出现在脚本中的任何位置,在完成执行救援之后我需要回到开始的下一行并继续工作。有没有办法在ruby中处理这个问题?

2 个答案:

答案 0 :(得分:0)

你不能在开始区内。虽然如果在异常之后需要运行任何代码,请使用ensure块。

begin
  aa = 20
  bb = 0
  puts 'before exception'
  c = aa / bb
rescue
  puts 'in rescue'
ensure
  puts 'after exception'
end

答案 1 :(得分:0)

下面是在自定义异常上解决一个这样的情况的方法,或者你需要将代码块分成几块并且有一个开始结束块,你觉得它可能看起来像引发一个异常。

    class Exception
      attr_accessor :continuation
      def ignore
        continuation.call
      end
    end

    require 'continuation' # Ruby 1.9
    module RaiseWithIgnore
      def raise(*args)
        callcc do |continuation|
          begin
            super
          rescue Exception => e
            e.continuation = continuation
            super(e)
          end
        end
      end
    end

    class Object
      include RaiseWithIgnore
    end

    def mj
      puts 'before exception'
      raise 'll'
      puts 'after exception'
    end

    begin
      mj
      rescue => e
        puts 'in rescue'
        e.ignore 
      end

希望这会有所帮助。 来源:http://avdi.org/talks/rockymtnruby-2011/things-you-didnt-know-about-exceptions.html