Skip to content

Misleading documentation of ! prefix in pdb #104301

@SnoopJ

Description

@SnoopJ

The documentation for pdb says:

.. pdbcommand:: ! statement Execute the (one-line) *statement* in the context of the current stack frame. The exclamation point can be omitted unless the first word of the statement resembles a debugger command. To set a global variable, you can prefix the assignment command with a :keyword:`global` statement on the same line, e.g.:: (Pdb) global list_options; list_options = ['-l'] (Pdb) 

Which suggests that the prefix is used with a space between the ! prefix and the statement to be executed. However, the implementation consumes only the prefix, which means that the natural reading of the docs leads to an IndentationError:

$ python3 test.py --Return-- > /home/snoopjedi/repos/cpython/test.py(3)<module>()->None -> breakpoint() (Pdb) l 1 lst = [1, 2, 3] 2 it = iter(lst) 3 -> breakpoint() [EOF] (Pdb) ! next(it) *** IndentationError: unexpected indent 

while omitting the space gives the intended result:

(Pdb) !next(it) 1 

It would also be helpful to have an example in the documentation that actually uses the prefix for first-word disambiguation as described in the text.

Linked PRs

Metadata

Metadata

Labels

docsDocumentation in the Doc dirtype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions