我有一个示例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
,我认为它应该是字典。
答案 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()
(这在这里肯定是正确的)它是不安全的并且不会警告你。对于不受控制的数据,它可以擦除光盘,甚至更糟。