无法解救YAML.loadexception

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

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

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

例外:

 # ruby test.rb /usr/lib64/ruby/1.9.1/psych.rb:203:in `parse': (): 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 `' 

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

SyntaxError的inheritance是:

 SyntaxError < ScriptError < Exception 

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

 StandardError < Exception 

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