From 1c205518a35939ef555c74d0e2f8954a5e1828e1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 1 Mar 2015 00:42:54 +0200 Subject: [PATCH] Issue #19980: Improved help() for non-recognized strings. help('') now shows the help on str. help('help') now shows the help on help(). Original patch by Mark Lawrence. --- Lib/pydoc.py | 14 ++++++++++---- Lib/test/test_pydoc.py | 5 ++++- Misc/ACKS | 1 + Misc/NEWS | 5 +++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index b762389cf3a..c92b324afd2 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1577,7 +1577,10 @@ def resolve(thing, forceload=0): if isinstance(thing, str): object = locate(thing, forceload) if not object: - raise ImportError('no Python documentation found for %r' % thing) + raise ImportError('''\ +No Python documentation found for %r. +Use help() to get the interactive help utility. +Use help(str) for help on the str class.''' % thing) return object, thing else: name = getattr(thing, '__name__', None) @@ -1848,7 +1851,10 @@ has the same effect as typing a particular string at the help> prompt. break request = replace(request, '"', '', "'", '').strip() if request.lower() in ('q', 'quit'): break - self.help(request) + if request == 'help': + self.intro() + else: + self.help(request) def getline(self, prompt): """Read one line, using input() when appropriate.""" @@ -1862,8 +1868,7 @@ has the same effect as typing a particular string at the help> prompt. def help(self, request): if type(request) is type(''): request = request.strip() - if request == 'help': self.intro() - elif request == 'keywords': self.listkeywords() + if request == 'keywords': self.listkeywords() elif request == 'symbols': self.listsymbols() elif request == 'topics': self.listtopics() elif request == 'modules': self.listmodules() @@ -1876,6 +1881,7 @@ has the same effect as typing a particular string at the help> prompt. 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 isinstance(request, Helper): self() else: doc(request, 'Help on %s:', output=self._output) self.output.write('\n') diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index e9fed0ad168..edfdb66497e 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -256,7 +256,10 @@ expected_html_data_docstrings = tuple(s.replace(' ', ' ') for s in expected_data_docstrings) # output pattern for missing module -missing_pattern = "no Python documentation found for '%s'" +missing_pattern = '''\ +No Python documentation found for %r. +Use help() to get the interactive help utility. +Use help(str) for help on the str class.'''.replace('\n', os.linesep) # output pattern for module with bad imports badimport_pattern = "problem in %s - ImportError: No module named %r" diff --git a/Misc/ACKS b/Misc/ACKS index 861216e7d09..7707f67e317 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -789,6 +789,7 @@ Ben Laurie Simon Law Julia Lawall Chris Lawrence +Mark Lawrence Brian Leair Mathieu Leduc-Hamel Amandine Lee diff --git a/Misc/NEWS b/Misc/NEWS index e9560e370b3..f1a14101917 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,11 @@ Core and Builtins Library ------- + +- Issue #19980: Improved help() for non-recognized strings. help('') now + shows the help on str. help('help') now shows the help on help(). + Original patch by Mark Lawrence. + - Issue #23521: Corrected pure python implementation of timedelta division. * Eliminated OverflowError from timedelta * float for some floats;