我有一个生成器,它通过过滤器从多个文件中返回行。它看起来像这样:
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/