]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-102541: Hide traceback in help prompt (gh-102614) (gh-105778)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 15 Jun 2023 14:56:04 +0000 (07:56 -0700)
committerGitHub <noreply@github.com>
Thu, 15 Jun 2023 14:56:04 +0000 (23:56 +0900)
gh-102541: Hide traceback in help prompt (gh-102614)
(cherry picked from commit ba516e70c6d156dc59dede35b6fc3db0151780a5)

Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
Lib/pydoc.py
Misc/NEWS.d/next/Library/2023-03-12-01-17-15.gh-issue-102541.LK1adc.rst [new file with mode: 0644]

index 84e673a7f87f90768e1fcda601b41e385f6e5b4c..d69369d4196eaaa0d165d9fdad22bea6aac70de9 100755 (executable)
@@ -1780,10 +1780,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))
 
@@ -2044,7 +2049,7 @@ has the same effect as typing a particular string at the help> prompt.
             self.output.flush()
             return self.input.readline()
 
-    def help(self, request):
+    def help(self, request, is_cli=False):
         if isinstance(request, str):
             request = request.strip()
             if request == 'keywords': self.listkeywords()
@@ -2056,13 +2061,13 @@ has the same effect as typing a particular string at the help> prompt.
             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):
@@ -2800,7 +2805,7 @@ def cli():
                     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 (file)
index 0000000..45b1067
--- /dev/null
@@ -0,0 +1 @@
+Hide traceback in :func:`help` prompt, when import failed.