【发布时间】:2022-08-22 06:24:26
【问题描述】:
在 Ruby 中的 optparse 中定义选项处理时,如果满足某个条件,我想引发异常 (OptionParser::ParseError),然后想救援异常,以便使用自定义消息优雅地退出,而不是让 Ruby 异常中止。
我设法做到了,使用 Exception 对象的error.message (下面附有示例代码,如果给定的参数是奇数,则会引发异常)。但是,我无法检索诸如给出的论点之类的基本信息。
此外,由于该算法依赖于包含在 Exception 对象中的文本消息(字符串),因此从定义上来说,准确错误的检测不可能是完美的。碰巧引发的任何其他异常对象都可能包含类似的字符串。那并不理想。
我怎样才能提出一个目标OptionParser::ParseError,它有关于错误的明确信息并在以后检索信息?
# my_prog.rb
require \'optparse\'
opts = OptionParser.new() do |opt|
optnum = nil
opt.on(\"-n\", \"--num NUM\", Integer, \"must be even\") do |v|
raise OptionParser::InvalidArgument, \"Odd number\" if v.odd?
optnum = v
end
begin
opt.parse!(ARGV)
rescue OptionParser::InvalidArgument => err
if err.message.include? \"Odd number\"
# err.message => \"invalid argument: -n Odd number\"
warn \"--num must be even.\"
exit 1
end
raise
end
end
p opts
运行my_prog.rb -n 5 会捕获异常(在这种特殊情况下),但例如我无法检索用户给定的选项“5”。
标签: ruby command-line command-line-arguments