无法解析yaml文件python

时间:2017-06-16 14:48:21

标签: yaml pyyaml

我有一个示例YAML文件,我无法使用PyYAML库解析它。

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,我认为它应该是字典。

1 个答案:

答案 0 :(得分:0)

使用第一个load()读取流后,流中没有更多数据,下一个加载返回None并且不会抛出错误(例如,流结束).. < / p>

你能做的是:

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()(这在这里肯定是正确的)它是不安全的并且不会警告你。对于不受控制的数据,它可以擦除光盘,甚至更糟。