我正在尝试处理在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>'
答案 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
”的额外箍。