ruby - 无法挽救 YAML.load 异常

标签 ruby exception exception-handling yaml

我正在尝试处理在 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/

相关文章:

ruby - 在 ruby​​ 中调用具有 root 权限的函数?

javascript - 为什么 Winstonjs ExceptionHandler 会消除我的 Node 错误?

ruby-on-rails - 处理嵌套关系 rails 2.3.x 中的 nil(空)值

android - 如何为 Gingerbread 上运行的应用授予 MODIFY_PHONE_STATE 权限

.net - 区分 .NET 异常类型

ruby-on-rails - 如何确保该表不包含重复项(基于两个外键)?

ruby 正则表达式匹配特定字符以外的任何字符

ruby-on-rails - Ruby 散列按多个值分组

java - 为什么要将 lambda 中的已检查异常包装在未检查异常中?

c++ - 捕获 C++ 基础异常