我正在尝试处理在 Ruby 中加载无效的 YAML 数据,但似乎无法挽救 psych 引发的异常。
这是一些示例代码来演示我遇到的问题:
require 'yaml'
begin
YAML.load('&*%^*')
rescue
puts "Rescued"
end
异常(exception)情况:
# 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
的继承是:
SyntaxError < ScriptError < Exception
rescue
不带参数只捕获 StandardError
,它是 Exception
的子类:
StandardError < Exception
因此,如果您想从 Yaml.load
捕获语法错误,您必须 rescue SyntaxError => e
或使用 rescue Exception 捕获所有错误=> e
.
关于ruby - 无法挽救 YAML.load 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676656/