From 60705cff70576482fea31dcafbf8a37cbb751ea5 Mon Sep 17 00:00:00 2001 From: Tom Sparrow <793763+sparrowt@users.noreply.github.com> Date: Fri, 21 Jan 2022 17:00:48 +0000 Subject: bpo-46434: Handle missing docstrings in pdb help (GH-30705) --- Lib/pdb.py | 3 +++ Lib/test/test_pdb.py | 21 +++++++++++++++++++++ Misc/ACKS | 1 + .../2022-01-20-10-35-10.bpo-46434.geS-aP.rst | 2 ++ 4 files changed, 27 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2022-01-20-10-35-10.bpo-46434.geS-aP.rst diff --git a/Lib/pdb.py b/Lib/pdb.py index d711007..58bc720 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1577,6 +1577,9 @@ class Pdb(bdb.Bdb, cmd.Cmd): self.error('No help for %r; please do not run Python with -OO ' 'if you need command help' % arg) return + if command.__doc__ is None: + self.error('No help for %r; __doc__ string missing' % arg) + return self.message(command.__doc__.rstrip()) do_h = do_help diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 01263db..d2bf3dc 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1474,6 +1474,27 @@ def bœr(): self.assertNotIn(b'SyntaxError', stdout, "Got a syntax error running test script under PDB") + def test_issue46434(self): + # Temporarily patch in an extra help command which doesn't have a + # docstring to emulate what happens in an embeddable distribution + script = """ + def do_testcmdwithnodocs(self, arg): + pass + + import pdb + pdb.Pdb.do_testcmdwithnodocs = do_testcmdwithnodocs + """ + commands = """ + continue + help testcmdwithnodocs + """ + stdout, stderr = self.run_pdb_script(script, commands) + output = (stdout or '') + (stderr or '') + self.assertNotIn('AttributeError', output, + 'Calling help on a command with no docs should be handled gracefully') + self.assertIn("*** No help for 'testcmdwithnodocs'; __doc__ string missing", output, + 'Calling help on a command with no docs should print an error') + def test_issue13183(self): script = """ from bar import bar diff --git a/Misc/ACKS b/Misc/ACKS index 04d6a65..cf023c9 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1675,6 +1675,7 @@ Evgeny Sologubov Cody Somerville Anthony Sottile Edoardo Spadolini +Tom Sparrow Geoffrey Spear Clay Spence Stefan Sperling diff --git a/Misc/NEWS.d/next/Library/2022-01-20-10-35-10.bpo-46434.geS-aP.rst b/Misc/NEWS.d/next/Library/2022-01-20-10-35-10.bpo-46434.geS-aP.rst new file mode 100644 index 0000000..6000781 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-01-20-10-35-10.bpo-46434.geS-aP.rst @@ -0,0 +1,2 @@ +:mod:`pdb` now gracefully handles ``help`` when :attr:`__doc__` is missing, +for example when run with pregenerated optimized ``.pyc`` files. -- cgit v0.12