[Python-checkins] [3.11] gh-102541: Hide traceback in help prompt (gh-102614). (gh-105830)

corona10 webhook-mailer at python.org
Thu Jun 15 11:29:04 EDT 2023


https://github.com/python/cpython/commit/abeb589290ef6458974d65a3f98e52d1f6bb9d49
commit: abeb589290ef6458974d65a3f98e52d1f6bb9d49
branch: 3.11
author: Dong-hee Na <donghee.na at python.org>
committer: corona10 <donghee.na92 at gmail.com>
date: 2023-06-15T15:29:00Z
summary:

[3.11] gh-102541: Hide traceback in help prompt (gh-102614). (gh-105830)

(cherry picked from commit ba516e70c6d156dc59dede35b6fc3db0151780a5)

Co-authored-by: Kirill Podoprigora <kirill.bast9 at mail.ru>

files:
A Misc/NEWS.d/next/Library/2023-03-12-01-17-15.gh-issue-102541.LK1adc.rst
M Lib/pydoc.py

diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 088a3ba8817c..151c7e877ba5 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1778,10 +1778,15 @@ def render_doc(thing, title='Python Library Documentation: %s', forceload=0,
     return title % desc + '\n\n' + renderer.document(object, name)
 
 def doc(thing, title='Python Library Documentation: %s', forceload=0,
-        output=None):
+        output=None, is_cli=False):
     """Display text documentation, given an object or a path to an object."""
     if output is None:
-        pager(render_doc(thing, title, forceload))
+        try:
+            pager(render_doc(thing, title, forceload))
+        except ImportError as exc:
+            if is_cli:
+                raise
+            print(exc)
     else:
         output.write(render_doc(thing, title, forceload, plaintext))
 
@@ -2042,8 +2047,8 @@ def getline(self, prompt):
             self.output.flush()
             return self.input.readline()
 
-    def help(self, request):
-        if type(request) is type(''):
+    def help(self, request, is_cli=False):
+        if isinstance(request, str):
             request = request.strip()
             if request == 'keywords': self.listkeywords()
             elif request == 'symbols': self.listsymbols()
@@ -2054,13 +2059,13 @@ def help(self, request):
             elif request in self.symbols: self.showsymbol(request)
             elif request in ['True', 'False', 'None']:
                 # special case these keywords since they are objects too
-                doc(eval(request), 'Help on %s:')
+                doc(eval(request), 'Help on %s:', is_cli=is_cli)
             elif request in self.keywords: self.showtopic(request)
             elif request in self.topics: self.showtopic(request)
-            elif request: doc(request, 'Help on %s:', output=self._output)
-            else: doc(str, 'Help on %s:', output=self._output)
+            elif request: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli)
+            else: doc(str, 'Help on %s:', output=self._output, is_cli=is_cli)
         elif isinstance(request, Helper): self()
-        else: doc(request, 'Help on %s:', output=self._output)
+        else: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli)
         self.output.write('\n')
 
     def intro(self):
@@ -2798,7 +2803,7 @@ class BadUsage(Exception): pass
                     else:
                         writedoc(arg)
                 else:
-                    help.help(arg)
+                    help.help(arg, is_cli=True)
             except (ImportError, ErrorDuringImport) as value:
                 print(value)
                 sys.exit(1)
diff --git a/Misc/NEWS.d/next/Library/2023-03-12-01-17-15.gh-issue-102541.LK1adc.rst b/Misc/NEWS.d/next/Library/2023-03-12-01-17-15.gh-issue-102541.LK1adc.rst
new file mode 100644
index 000000000000..45b10679e19e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-03-12-01-17-15.gh-issue-102541.LK1adc.rst
@@ -0,0 +1 @@
+Hide traceback in :func:`help` prompt, when import failed.



More information about the Python-checkins mailing list