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

rescueStandardErrorパラメータなしでは、次のサブクラスであるキャッチのみが行われExceptionます。

StandardError < Exception

したがって、から構文エラーをキャッチする場合は、またはを使用してすべてのエラーをキャッチYaml.loadする必要があります。rescue SyntaxError => erescue Exception => e

于 2013-02-03T20:15:54.010 に答える
5

エラーをキャッチしないレスキューの開始を参照してください。構文エラーを救済することは可能ですが、お勧めしません。これが、「」と入力するという余分なフープを飛び越える必要がある理由ですrescue SyntaxError

于 2013-02-03T20:05:55.553 に答える