gpt4 book ai didi

python - Python 调试器会介入生成器吗?

转载 作者:太空狗 更新时间:2023-10-29 21:55:39 25 4
gpt4 key购买 nike

我目前正在使用 NetBeans IDE 和 Jython 2.5.1

在逐步调试我的项目时,只要遇到对生成器的迭代,调试器就会直接到代码末尾。输出正常,但是一旦遇到第一个生成器就无法一步步调试了。

这是所有 Python IDE 中 Python 调试的标准行为吗?难道不能像调试“for”循环的每个元素的 VBA 一样调试代码“yield after yield”(抱歉提到 VBA :)?

谢谢。

编辑

没有生成器

代码:

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

print "hello"

print "goodbye"

输出:

hello
goodbye

调试:

[LOG]PythonDebugger : overall Starting
[LOG]PythonDebugger.taskStarted : I am Starting a new Debugging Session ...
[LOG]This window is an interactive debugging context aware Python Shell
[LOG]where you can enter python console commands while debugging

(...)

>>>[stdout:]hello
>>>[stdout:]goodbye
Debug session normal end

使用生成器

代码:

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

print "hello"

for n in example(3):
print n

print "goodbye"

输出:

hello
1
2
3
goodbye

调试:

[LOG]PythonDebugger : overall Starting
[LOG]PythonDebugger.taskStarted : I am Starting a new Debugging Session ...
[LOG]This window is an interactive debugging context aware Python Shell
[LOG]where you can enter python console commands while debugging

(...)

>>>[stdout:]hello
>>>None['GeneratorExit
deamon ended
']

Debug session normal end

最佳答案

我不使用 NetBeans,但 pdb 至少会单步执行生成器。例如:

$ cat test.py
def the_generator():
for i in xrange(10):
yield i

for x in the_generator():
print x

$ python -mpdb test.py
> test.py(1)<module>()
-> def the_generator():
(Pdb) n
> test.py(5)<module>()
-> for x in the_generator():
(Pdb) s
--Call--
> test.py(1)the_generator()
-> def the_generator():
(Pdb) n
> test.py(2)the_generator()
-> for i in xrange(10):
(Pdb) n
> test.py(3)the_generator()
-> yield i
(Pdb) n
--Return--
> test.py(3)the_generator()->0
-> yield i
(Pdb) n
> test.py(6)<module>()
-> print x
(Pdb) n
0

如果您发布一些代码,我们可以尝试弄清楚您的情况到底发生了什么。

关于python - Python 调试器会介入生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com