TypeError:' generator'对象不可调用。

时间:2017-12-10 15:52:56

标签: python-3.x

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?

不同

2 个答案:

答案 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()

做什么

如果这个答案不适合您,我建议您更详细地编辑您的问题。