我有一个方法可以抛出带有一些有意义的描述的ParserException
,并在任何ParserException
上抛出generalStandardError
:
作为一个最小的可重复的例子:
begin
item = parseItem(json)
if !item.id
raise ParserException.new("id property is missing")
end
item
rescue => ex
raise ParserException.new("exception occurred when tried to parse JSON", ex: ex)
end
现在,问题是如果
id
属性丢失,那么ParserException
将被捕获,包装到另一个ParserException
中,然后用不太有意义的消息重新抛出。我可以这样做:
begin
# ...
rescue ParserException
raise
rescue => ex
raise ParserException.new("exception occurred when tried to parse JSON", ex: ex)
end
但是看起来有点难看有没有更简洁的方法来实现这一点像
rescue !ParserException => ex
?例如,在C中,我可以这样做(这也可能被认为是丑陋的,但我问是因为好奇):
try
{
throw new ParserException("Specific error");
catch (Exception ex) when (!(ex is ParserException))
{
throw new ParserException("Generic error");
}
最佳答案
你当前的修复可能是最干净的方法,但我你不希望额外的救援块,你也可以处理它在你的全面解决方案。
begin
# ...
rescue => ex
raise if ex.is_a? ParserException
raise ParserException.new("exception occurred when tried to parse JSON", ex: ex)
end