ruby YAML moduleのYAML.load_file(foo)
は、foo
がYAMLファイルでない場合にnullを返すことを期待したいと思います。しかし例外があります:ファイルがYAMLかどうかを知る
did not find expected alphabetic or numeric character while scanning an alias at line 3 column 3 (Psych::SyntaxError)
from /usr/lib/ruby/2.4.0/psych.rb:377:in `parse_stream'
from /usr/lib/ruby/2.4.0/psych.rb:325:in `parse'
from /usr/lib/ruby/2.4.0/psych.rb:252:in `load'
from /usr/lib/ruby/2.4.0/psych.rb:473:in `block in load_file'
from /usr/lib/ruby/2.4.0/psych.rb:472:in `open'
from /usr/lib/ruby/2.4.0/psych.rb:472:in `load_file'
from ./select.rb:27:in `block in selecting'
from ./select.rb:26:in `each'
from ./select.rb:26:in `selecting'
from ./select.rb:47:in `block (2 levels) in <main>'
from ./select.rb:46:in `each'
from ./select.rb:46:in `block in <main>'
from ./select.rb:44:in `each'
from ./select.rb:44:in `<main>'
ファイルが例外なしでYAMLファイルであるかどうかを調べるにはどうしたらいいですか?私の場合、私は、ディレクトリとプロセス値下げファイルに移動します。私は例外をキャッチすると、bucleは要素をプッシュし続けない
mylist = Array.new
mylist = []
for d in (directory - excludinglist)
begin
info = YAML.load_file(d)
if info
if info.has_key?('output')
if info['output'].has_key?(word)
mylist.push(d)
end
end
end
rescue Psych::SyntaxError => error
return []
end
end
return mylist
私は、キーoutput: word
でリスト値下げファイルに追加して、私はそのリストを返します私のリストに。
はどのようにして' null'なのでを区別します。私。 YAML文書が空であるか、あるいは 'null'(すなわち、 '〜'、 'ヌル'、 'ヌル'と 'ヌル')として表現されるスカラーだけを含んでいますか? – Anthon