如何在调试模式下使产量工作?

时间:2017-11-19 17:54:43

标签: python python-3.x yield ipdb

我正在使用ipdb和yield。我注意到当与ipdb一起使用时,yield没有按预期运行。

具体来说,这个代码在用ipdb调试时(按下' n' 键盘中的字符只是跳过yield命令而不是从函数返回

def cats():
    print(-1)
    yield
    for i in range(4):
        print(i)
        yield

import ipdb
ipdb.set_trace()
x = cats()
next(x)
next(x)
next(x)

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

yield之后,ipdb和pdb都需要一个语句,以便它们停在 cats()里面,而且没有。有趣的是,pdb将在返回时停止说:

def cats2():
        if len(__file__) > 5:
            import pdb; pdb.set_trace()
cats2()

老实说,我不能在pdb的上下文中想到解决这个问题的方法,比如ipdb。

trepan调试器trepan3k(对于python 3)和trepan2不会遇到此问题。他们对待yield的方法与pdb对待return的方式相同。这是为了这样的事情,修复了pdb无法处理的许多边缘情况,我编写了这些调试器。