我是python&的新手访问lib pyyaml,yaml.load_all中函数返回的iterateable的第二个元素时遇到问题,下面是代码:
import os
import yaml
file = "abc.yaml"
stream = open(file)
docs = yaml.load_all(stream)
print docs[1]
我得到的输出是
TypeError: 'NoneType' object has no attribute '__getitem__'
答案 0 :(得分:0)
如果您只需要那个文档,那么应该这样做:
docs = yaml.load_all(...)
next(docs) # skip docs[0]
mydoc = next(docs)
答案 1 :(得分:0)
您提到的错误消息(TypeError: 'NoneType' object has no attribute '__getitem__'
)并非来自docs
作为生成器,而是来自docs
None
。
但无论如何,要回答你的问题:你不能“在生成器中的索引处访问元素”,因为生成器不是可订阅的 - 生成器的整个点是动态生成值。如果您确实需要可订阅的序列,最简单的方法是从您的生成器构建list
,即:
docs = list(yaml.load_all(stream))
现在要小心你宁愿不这样做,除非你确定1.你的发电机不是无限的(发电机可以是无限的,有些是)和2.列表将适合记忆。
注意:我在这里使用“生成器”这个词,但它通常适用于迭代器。