Skip to content

Commit 7828042

Browse files
committed
gh-102541: Hide traceback in help prompt
1 parent cbb0aa7 commit 7828042

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

Lib/pydoc.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,10 +1775,15 @@ def render_doc(thing, title='Python Library Documentation: %s', forceload=0,
17751775
return title % desc + '\n\n' + renderer.document(object, name)
17761776

17771777
def doc(thing, title='Python Library Documentation: %s', forceload=0,
1778-
output=None):
1778+
output=None, is_cli=False):
17791779
"""Display text documentation, given an object or a path to an object."""
17801780
if output is None:
1781-
pager(render_doc(thing, title, forceload))
1781+
try:
1782+
pager(render_doc(thing, title, forceload))
1783+
except ImportError as exc:
1784+
if is_cli:
1785+
raise
1786+
print(exc)
17821787
else:
17831788
output.write(render_doc(thing, title, forceload, plaintext))
17841789

@@ -2039,7 +2044,7 @@ def getline(self, prompt):
20392044
self.output.flush()
20402045
return self.input.readline()
20412046

2042-
def help(self, request):
2047+
def help(self, request, is_cli=False):
20432048
if isinstance(request, str):
20442049
request = request.strip()
20452050
if request == 'keywords': self.listkeywords()
@@ -2051,13 +2056,13 @@ def help(self, request):
20512056
elif request in self.symbols: self.showsymbol(request)
20522057
elif request in ['True', 'False', 'None']:
20532058
# special case these keywords since they are objects too
2054-
doc(eval(request), 'Help on %s:')
2059+
doc(eval(request), 'Help on %s:', is_cli=is_cli)
20552060
elif request in self.keywords: self.showtopic(request)
20562061
elif request in self.topics: self.showtopic(request)
2057-
elif request: doc(request, 'Help on %s:', output=self._output)
2058-
else: doc(str, 'Help on %s:', output=self._output)
2062+
elif request: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli)
2063+
else: doc(str, 'Help on %s:', output=self._output, is_cli=is_cli)
20592064
elif isinstance(request, Helper): self()
2060-
else: doc(request, 'Help on %s:', output=self._output)
2065+
else: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli)
20612066
self.output.write('\n')
20622067

20632068
def intro(self):
@@ -2795,7 +2800,7 @@ class BadUsage(Exception): pass
27952800
else:
27962801
writedoc(arg)
27972802
else:
2798-
help.help(arg)
2803+
help.help(arg, is_cli=True)
27992804
except (ImportError, ErrorDuringImport) as value:
28002805
print(value)
28012806
sys.exit(1)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hide traceback in :func:`help` prompt, when import failed.

0 commit comments

Comments
 (0)