Nip*_*rus 11 ruby exception-handling exception
我来自C#背景,我通常使用父异常中包含的原始异常重新引发异常.Ruby中是否有类似的概念?如何在保持较低级别异常的上下文的同时检测并引发异常?
Hen*_*rik 13
看看Avdi Grimm 的演讲特别Ruby中的技巧:
class MyError < StandardError
attr_reader :original
def initialize(msg, original=nil);
super(msg);
@original = original;
end
end
# ...
rescue => error
raise MyError.new("Error B", error)
end
Run Code Online (Sandbox Code Playgroud)
对于 Ruby 2.1 之前的版本,您可以扩展 StandardError:
class StandardError
attr_accessor :original
end
Run Code Online (Sandbox Code Playgroud)
当您引发异常时,只需设置此属性:
def reraise ex, original
ex.original = original
raise ex
end
rescue StandardError => e
reraise ArgumentError.new('Message'), e
end
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您将能够引发标准 ruby 错误并为它们设置父错误,而不仅仅是您的自定义错误。
对于 ruby 2.1 及更高版本,您可以使用Exception#cause另一个答案中提到的方法。
Ruby 2.1添加了Exception#cause功能来解决这个问题.
| 归档时间: |
|
| 查看次数: |
5975 次 |
| 最近记录: |