2013-10-20 37 views
0

我在Windows 7 x64上使用pydev,并且我发现发生器函数中的断点被忽略(如果我注释掉yield,一切工作正常)。pydev不能在发电机中步骤

后来我发现一个旧SO质疑Does Python debugger step in generators?

回答说:“我只是测试日食,它会做调试安装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. 如果不是,我该怎么做才能调试这样的代码?
+0

@martineau我只是复制从旧的问题,原代码.. – laike9m

回答

2

当我运行的老问题(不是你有你的问题)与调试器的“与发电机”一节中完全代码,并把一个断点在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" 
+0

非常感谢,我应该已经注意到,早。 – laike9m

+0

@ laike9m:事实上,如果你不习惯Python的生成器和迭代器,那么就很容易忘记。如果你认为这是值得的,请考虑对我的答案进行投票。 – martineau