def lines(file):
for line in file:
yield line
yield '\n'
def blocks(file):
block = []
for line in lines(file):
if line.strip():
block.append(line)
elif block:
yield ''.join(block).strip()
block = []
with open(r'test_input.txt', 'r') as f:
lines = lines(f)
file = blocks(lines)
for line in file:
print(line)
我收到此错误消息:
TypeError: 'generator' object is not callable
我不知道发生了什么。是因为python3.6中的生成器与2.X?
不同答案 0 :(得分:1)
您的问题是由此行引起的:
lines = lines(f)
通过此分配,您将使用自己的返回值覆盖lines
生成器函数。这意味着当blocks
尝试再次调用lines
时(这对我而言似乎有些小问题,而不是主要问题),它会获取生成器对象而不是预期的函数。
为作业选择一个不同的名称,或者只是将f
传递给blocks
,因为它本身会调用lines
。
答案 1 :(得分:0)
您的问题与Python3无关。 Python 2.6存在此错误。
我不确切地知道您尝试做什么,但您的代码不会引发错误,将blocks
函数替换为:
def blocks(file):
block = []
for line in file: # here, replace lines(file) with file
if line.strip():
block.append(line)
elif block:
yield ''.join(block).strip()
block = []
但是,我不明白您尝试使用lines()
如果这个答案不适合您,我建议您更详细地编辑您的问题。