2

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

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

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>'
4

2 回答 2

8

的继承SyntaxError是:

SyntaxError < ScriptError < Exception

rescue没有参数只捕获StandardError它的子类Exception

StandardError < Exception

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

于 2013-02-03T20:15:54.010 回答
5

请参阅Begin Rescue 未捕获错误。可以挽救语法错误,但不推荐。这就是为什么您需要跳过键入“ rescue SyntaxError”的额外步骤。

于 2013-02-03T20:05:55.553 回答