无法解救YAML.load异常

时间:2013-02-03 20:00:13

标签: ruby exception exception-handling yaml

我正在尝试处理在Ruby中加载无效的YAML数据,但似乎无法挽救心理引发的异常。

这是一些示例代码,用于演示我遇到的问题:

require 'yaml'
begin
    YAML.load('&*%^*')
rescue
    puts "Rescued"
end

例外:

# ruby test.rb
/usr/lib64/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): did not find expected alphabetic or numeric character while scanning an anchor at line 1 column 1 (Psych::SyntaxError)
    from /usr/lib64/ruby/1.9.1/psych.rb:203:in `parse_stream'
    from /usr/lib64/ruby/1.9.1/psych.rb:151:in `parse'
    from /usr/lib64/ruby/1.9.1/psych.rb:127:in `load'
    from test.rb:3:in `<main>'

2 个答案:

答案 0 :(得分:7)

SyntaxError的继承是:

SyntaxError < ScriptError < Exception
不带参数的

rescue仅捕获StandardError的子类Exception

StandardError < Exception

因此,如果您想从Yaml.load捕获语法错误,则必须rescue SyntaxError => e或使用rescue Exception => e捕获所有错误。

答案 1 :(得分:5)

Begin Rescue not catching error。可以挽救语法错误,但不推荐。这就是为什么你需要跳过输入“rescue SyntaxError”的额外箍。