【发布时间】:2019-12-22 04:27:08
【问题描述】:
我有一个非常简单的测试文件breakpoint_test.py
for i in range(3): #1
breakpoint() #2
print(f"first print in loop {i}") #3
breakpoint() #4
print(f"second print in loop {i}") #5
这是我运行时的输出并按住c 以继续。
(py3) nakita@machine:~/tmp $ python breakpoint_test.py
> /Users/nakita/tmp/breakpoint_test.py(3)<module>()
-> print(f"first print in loop {i}") <---------------looks good here!
(Pdb) c
first print in loop 0
> /Users/nakita/tmp/breakpoint_test.py(5)<module>()
-> print(f"second print in loop {i}")
(Pdb) c
second print in loop 0
> /Users/nakita/tmp/breakpoint_test.py(2)<module>()
-> breakpoint() <---------------weird here!
(Pdb) c
first print in loop 1
> /Users/nakita/tmp/breakpoint_test.py(5)<module>()
-> print(f"second print in circle {i}")
(Pdb) c
second print in loop 1
> /Users/nakita/tmp/breakpoint_test.py(2)<module>()
-> breakpoint()
(Pdb) c
first print in loop 2
> /Users/nakita/tmp/breakpoint_test.py(5)<module>()
-> print(f"second print in circle {i}")
(Pdb) c
second print in loop 2
我希望breakpoint() 会提示将在breakpoint() 之后执行的行。当代码第一次进入for 循环时,这是真的。但是在第二个循环中迭代时,第一个断点()提示breakpoint() 行本身而不是-> print(f"first print in loop {i}")。但是,循环体中的第二个breakpoint() 可以按我的预期工作。看起来行为首先是breakpoint() in for 循环体将被牺牲。有人知道为什么吗?
我在 python 3.7.3 和 3.8.0 上对其进行了测试。 我已阅读PEP 553 -- Built-in breakpoint()
【问题讨论】:
标签: python python-3.x breakpoints pdb