将我的代码视为
begin
aa = 20
bb = 0
puts 'before exception'
c = aa / bb
puts 'after exception'
rescue
puts 'in rescue'
end
它将输出显示为
before exception
in rescue
如果我想在例外后打印'同样。我该怎么做?
我需要在异常引发后继续下一个语句。请帮助我。
编辑:我刚刚提到了上面的示例代码。考虑一下,我可能不知道会发生什么地方和什么异常,它可能会出现在脚本中的任何位置,在完成执行救援之后我需要回到开始的下一行并继续工作。有没有办法在ruby中处理这个问题?
答案 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