python - 为什么我的生成器挂起而不是抛出异常?

标签 python python-2.7

我有一个生成器,它通过过滤器从多个文件中返回行。它看起来像这样:

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()。这就是它挂起的地方,我不明白为什么。我试图成为 pythonic,而不是自己处理所有错误,但我想这是一个没有办法解决的问题。或者有吗?

不幸的是,我现在无法在 Linux 上对此进行测试,但有人可以在 Linux 上尝试以下操作,并评论他们得到的结果吗?

import fileinput
s = fileinput.input([])
s.next()

我在 Windows 上使用 Python 2.7.5(64 位)。

总而言之,我真的很想知道:

这是 Python 中的错误,还是我做错了什么? .next() 不应该总是返回一些东西,或者引发一个 StopIteration 吗?

最佳答案

fileinput如果列表为空,则默认为 stdin,因此它只是在等待您输入内容。

一个明显的解决方法是摆脱 fileinput(无论如何都不是很有用)并且要明确,正如 python zen 所建议的:

for path in self.get_files():
    with open(path) as fp:
      for line in fp:
         etc

关于python - 为什么我的生成器挂起而不是抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492139/

相关文章:

mysql - 结合日期和时间来创建时间序列的索引

python - 使用旧列表中复制和平均的项目创建新列表

python - gtk:设置事件窗口

Python pandas groupby 总和显示错误的输出

python - 将内存从 Python 释放回操作系统的方法?

Python:从两个列表构建字典

Python pandas : dataframe grouped by a column(such as, name),并获取每组中某些列的值

python - 按第二个空格拆分字符串

python - 从 DataFrame 获取值

python - 从另一个列表中删除列表列表