Skip to main content
 首页 » 编程设计

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

2025年05月04日17softidea

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

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