2017-06-16 19 views
0

サンプルのYAMLファイルがあり、PyYAMLライブラリを使用して解析できません。yamlファイルのpythonを解析できません

setup.yml

key: HostName 
deviceid: port1 

Pythonコード

with open('../configs/setup.yml') as stream: 
    try: 
     print 'yaml.data ==', yaml.load(stream) 
     print 'yaml.data ==', type(yaml.load(stream)) 
     # print 'yaml.data ==', dict(yaml.load(stream)) 
     data = yaml.safe_load(stream) 
     self.device_id = data['deviceid'] 
     self.key = yaml.load(stream)['key'] 
    except yaml.YAMLError as exc: 
     print(exc) 

yaml.load(stream)タイプがNonetypeですが、私はそれは辞書でなければなりませんと思いました。

答えて

0

あなたが最初load()でストリームを読んだ後がストリーム内にこれ以上データがありませんし、次の負荷がNoneを返し、エラー(ストリームの例終わり)をスローしません。..

あなたは何ができますか次のとおりです。

import yaml 

with open('../configs/setup.yml') as stream: 
    print 'yaml.data ==', yaml.load(stream) 
    stream.seek(0, 0) 
    print 'yaml.data ==', type(yaml.load(stream)) 
    # print 'yaml.data ==', dict(yaml.load(stream)) 
with open('../configs/setup.yml') as stream: 
    data = yaml.safe_load(stream) 
    device_id = data['deviceid'] 
    key = data['key'] 

または、読み込まれたドキュメントを最初からデータに格納します。以前のエラーのためにself.への参照を削除しましたが、その未定義の変数には決して来ませんでした。それは安全でないとそのことについて警告を発しません

しかし、PyYAMLとのload()を使用する必要はほとんどないありません(それは確かにここに真です)。コントロールされていないデータを使用すると、ディスクを拭くことができます。

関連する問題