如何访问python中生成器索引的元素?

时间:2014-11-21 09:40:48

标签: python yaml pyyaml

我是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__'

yaml是用于处理yaml格式的python库, yaml.load_all被解释为here

2 个答案:

答案 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.列表将适合记忆。

注意:我在这里使用“生成器”这个词,但它通常适用于迭代器。

相关问题