Ruby中如何避免在多处重复提出相同的例外情况?

2026-04-11 20:192阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计418个文字,预计阅读时间需要2分钟。

Ruby中如何避免在多处重复提出相同的例外情况?

简写:Ruby中处理异常,避免直接抛出,建议使用自定义异常类。

内容:Ruby中,处理异常时,不建议直接抛出错误。例如:

rubydef entry_point_one begin do_something rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc=> syn_err raise syn_err.exception(syn_err.message) endend

def entry_point_two begin # ... endend

短:

有没有办法在Ruby中干掉 – 如果这样:

def entry_point_one begin do_something rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end end def entry_point_two begin do_something_else rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end end

更长:

我正在建一个翻译.可以使用不同的入口点调用此解释器.如果我为这个解释器提供一个’脏’字符串,我希望它会引发错误.但是,如果我没有被do_something直接或间接调用的每个方法的整个后向跟踪发送垃圾邮件,那将是很好的,特别是因为解释器使用递归.

Ruby中如何避免在多处重复提出相同的例外情况?

正如您在上面的代码片段中所看到的,我已经知道了一种重新引发错误并从而删除回溯的方法.我想要做的是删除上面示例中的重复.我到目前为止最接近的是:

def entry_point_one re_raise_known_exceptions {do_something} end def entry_point_two re_raise_known_exceptions {do_something_else} end def re_raise_known_exceptions yield rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end

但这使得该方法重新提升 – 已知 – 异常出现在后面的跟踪中.

编辑:我想我想要的就是C预处理宏

您可以在阵列上使用splat.

直接来自IRB:

COMMON_ERRORS = [ArgumentError, RuntimeError] # add your own def f yield rescue *COMMON_ERRORS => err puts "Got an error of type #{err.class}" end f{ raise ArgumentError.new } Got an error of type ArgumentError f{ raise 'abc' } Got an error of type RuntimeError

本文共计418个文字,预计阅读时间需要2分钟。

Ruby中如何避免在多处重复提出相同的例外情况?

简写:Ruby中处理异常,避免直接抛出,建议使用自定义异常类。

内容:Ruby中,处理异常时,不建议直接抛出错误。例如:

rubydef entry_point_one begin do_something rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc=> syn_err raise syn_err.exception(syn_err.message) endend

def entry_point_two begin # ... endend

短:

有没有办法在Ruby中干掉 – 如果这样:

def entry_point_one begin do_something rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end end def entry_point_two begin do_something_else rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end end

更长:

我正在建一个翻译.可以使用不同的入口点调用此解释器.如果我为这个解释器提供一个’脏’字符串,我希望它会引发错误.但是,如果我没有被do_something直接或间接调用的每个方法的整个后向跟踪发送垃圾邮件,那将是很好的,特别是因为解释器使用递归.

Ruby中如何避免在多处重复提出相同的例外情况?

正如您在上面的代码片段中所看到的,我已经知道了一种重新引发错误并从而删除回溯的方法.我想要做的是删除上面示例中的重复.我到目前为止最接近的是:

def entry_point_one re_raise_known_exceptions {do_something} end def entry_point_two re_raise_known_exceptions {do_something_else} end def re_raise_known_exceptions yield rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err raise syn_err.exception(syn_err.message) end

但这使得该方法重新提升 – 已知 – 异常出现在后面的跟踪中.

编辑:我想我想要的就是C预处理宏

您可以在阵列上使用splat.

直接来自IRB:

COMMON_ERRORS = [ArgumentError, RuntimeError] # add your own def f yield rescue *COMMON_ERRORS => err puts "Got an error of type #{err.class}" end f{ raise ArgumentError.new } Got an error of type ArgumentError f{ raise 'abc' } Got an error of type RuntimeError