我有一个生成器,它通过过滤器从许多文件中返回行。看起来像这样:
def line_generator(self):
# Find the relevant files
files = self.get_files()
# Read lines
input_object = fileinput.input(files)
for line in input_object:
# Apply filter and yield if it is not *None*
filtered = self.__line_filter(input_object.filename(), line)
if filtered is not None:
yield filtered
input_object.close()
方法self.get_files()
返回文件路径列表或空列表。
我试图做s = fileinput.input([])
,然后调用s.next()
。这就是它挂的地方,我不明白为什么。我试着变成Python,而不是自己处理所有的错误,但我想这是一个没有办法的地方。还是有?在
不幸的是,我现在没有办法在Linux上测试这一点,但是有人可以在Linux上尝试下面的操作,并评论一下他们得到了什么?在
^{pr2}$我使用的是带有python2.7.5(64位)的Windows。在
总之,我很想知道:
这是Python中的bug,还是我做错了什么?
next()不应该总是返回某个值,或者引发一个StopIteration
?在
正如其他人已经回答的那样,我试图回答一个具体的分项:
是的,但不指定何时应该发生此返回:在几毫秒、几秒钟甚至更长的时间内。在
如果您有一个阻塞迭代器,您可以在它周围定义一些包装器,以便它在不同的线程中运行,填充一个列表或其他东西,并且原始线程将获得一个接口来确定是否存在数据、当前是否没有数据或源是否已用尽。在
如果需要的话,我可以详细说明。在
如果列表为空,^{} 将默认为stdin,因此它将等待您键入内容。在
一个明显的解决方法是去掉
fileinput
(反正不是很有用)并且显式地,正如python zen建议的那样:相关问题 更多 >
编程相关推荐