pydev无法进入发电机

时间:2013-10-20 06:18:15

标签: python debugging generator pydev

我在Windows 7 x64上使用pydev,我发现生成器函数中的断点被忽略(如果我注释掉yield,一切正常)。

然后我发现了一个旧的SO问题Does Python debugger step in generators?

答案是“我刚刚测试了eclipse,它将在安装pydev时进行调试。”

但是当我测试代码时,断点仍然被忽略。

def example(n):
    i = 1
    while i <= n:
        yield i
        i += 1

print "hello"

print "goodbye"

if __name__ == '__main__':
    example(8)

所以我的问题是:

  1. PyDev能否介入发电机?
  2. 如果没有,我该怎么做才能调试这样的代码?

1 个答案:

答案 0 :(得分:2)

当我使用调试器运行旧问题的“With the Generator”部分中的代码(不是您的问题中的代码)并在i += 1语句上放置断点时,它确实停止运行每当我按F8恢复直到发电机耗尽时,我会继续这样做。我正在使用PyDev for Eclipse 2.8.2.2013090511。

问题是你的代码只调用生成器函数一次,它只返回一个迭代器对象 - 它实际上并不执行函数中的代码。为此,您需要以某种方式迭代返回的对象 - 通过for语句隐式地或通过调用其next方法显式地迭代。请参阅文档中的Generator functions部分。

这是我使用的代码:

def example(n):
    i = 1
    while i <= n:
        yield i
        i += 1

print "hello"

for n in example(3):
    print n

print "goodbye"