From 8d09216470a3af2af03d76db41036d52c6d7e5ad 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: [PATCH] bpo-46434: Handle missing docstrings in pdb help (GH-30705) (cherry picked from commit 60705cff70576482fea31dcafbf8a37cbb751ea5) Co-authored-by: Tom Sparrow <793763+sparrowt@users.noreply.github.com> --- 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 943211158ac41e..7ab50b4845d3e6 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1493,6 +1493,9 @@ def do_help(self, arg): 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 d4c037dabff97e..6ac1a4a3c30255 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1463,6 +1463,27 @@ def test_issue7964(self): 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 9292bdc8dc73b7..7f9166cd74cfab 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1668,6 +1668,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 00000000000000..6000781fa5aea9 --- /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.