breakpoint does not enter pdb until the "next event" happens (original) (raw)

Bug report

Bug description:

Consider the following code:

try: raise ValueError() except Exception as exc: breakpoint()

You can't stop in the except block, you'll get:

--Return--
> /home/gaogaotiantian/programs/mycpython/example.py(4)<module>()->None
-> breakpoint()
(Pdb)

which is pretty misleading because you can't access anything in the except block:

(Pdb) import sys
(Pdb) sys.exc_info()
(None, None, None)
(Pdb) p exc
*** NameError: name 'exc' is not defined
(Pdb) 

If you put a pass in the main function:

try: raise ValueError() except Exception as exc: breakpoint() pass

At least the result is less misleading. Even though it's still not what I want - I want to stop in the except block.

> /home/gaogaotiantian/programs/mycpython/example.py(5)<module>()
-> pass

The "correct" way to do it is to put another line in the block

try: raise ValueError() except Exception as exc: breakpoint() pass

We can stop at the breakpoint() actually, but that's a breaking behavior, I don't think we want that. So maybe we should at least document this in pdb so users get less confused?

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs