关于ruby:无法解救YAML.load异常

Can't rescue YAML.load exception

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

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

1
2
3
4
5
6
require 'yaml'
begin
    YAML.load('&*%^*')
rescue
    puts"Rescued"
end

例外情况:

1
2
3
4
5
6
# 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>'


SyntaxError的继承是:

1
SyntaxError < ScriptError < Exception

不带参数的rescue只捕获StandardError,它是Exception的子类:

1
StandardError < Exception

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


请参阅开始救援未捕获错误。 可以挽救语法错误,但不推荐。 这就是为什么你需要跳过输入"rescue SyntaxError"的额外箍。