diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-08-27 01:17:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-27 01:17:40 (GMT) |
commit | 7361451b97a30de0e758094ac83a1fb1f01ed5bb (patch) | |
tree | d0bf78c72a7c1dade87db56c1e63c7e877a6a919 | |
parent | 211e4c6e9c1ab60bb2577dda6587fbec79f679b2 (diff) | |
download | cpython-7361451b97a30de0e758094ac83a1fb1f01ed5bb.zip cpython-7361451b97a30de0e758094ac83a1fb1f01ed5bb.tar.gz cpython-7361451b97a30de0e758094ac83a1fb1f01ed5bb.tar.bz2 |
bpo-41609: Fix output of pdb's whatis command for instance methods (GH-21935) (#21977)
(cherry picked from commit 022bc7572f061e1d1132a4db9d085b29707701e7)
Co-authored-by: Irit Katriel <iritkatriel@yahoo.com>
-rwxr-xr-x | Lib/pdb.py | 12 | ||||
-rw-r--r-- | Lib/test/test_pdb.py | 41 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-08-21-15-51-15.bpo-41609.JmiUKG.rst | 1 |
3 files changed, 48 insertions, 6 deletions
@@ -1312,21 +1312,21 @@ class Pdb(bdb.Bdb, cmd.Cmd): # _getval() already printed the error return code = None - # Is it a function? + # Is it an instance method? try: - code = value.__code__ + code = value.__func__.__code__ except Exception: pass if code: - self.message('Function %s' % code.co_name) + self.message('Method %s' % code.co_name) return - # Is it an instance method? + # Is it a function? try: - code = value.__func__.__code__ + code = value.__code__ except Exception: pass if code: - self.message('Method %s' % code.co_name) + self.message('Function %s' % code.co_name) return # Is it a class? if value.__class__ is type: diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 65bca29..8016f81 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -425,6 +425,47 @@ def test_list_commands(): (Pdb) continue """ +def test_pdb_whatis_command(): + """Test the whatis command + + >>> myvar = (1,2) + >>> def myfunc(): + ... pass + + >>> class MyClass: + ... def mymethod(self): + ... pass + + >>> def test_function(): + ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + + >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... 'whatis myvar', + ... 'whatis myfunc', + ... 'whatis MyClass', + ... 'whatis MyClass()', + ... 'whatis MyClass.mymethod', + ... 'whatis MyClass().mymethod', + ... 'continue', + ... ]): + ... test_function() + --Return-- + > <doctest test.test_pdb.test_pdb_whatis_command[3]>(2)test_function()->None + -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + (Pdb) whatis myvar + <class 'tuple'> + (Pdb) whatis myfunc + Function myfunc + (Pdb) whatis MyClass + Class test.test_pdb.MyClass + (Pdb) whatis MyClass() + <class 'test.test_pdb.MyClass'> + (Pdb) whatis MyClass.mymethod + Function mymethod + (Pdb) whatis MyClass().mymethod + Method mymethod + (Pdb) continue + """ def test_post_mortem(): """Test post mortem traceback debugging. diff --git a/Misc/NEWS.d/next/Library/2020-08-21-15-51-15.bpo-41609.JmiUKG.rst b/Misc/NEWS.d/next/Library/2020-08-21-15-51-15.bpo-41609.JmiUKG.rst new file mode 100644 index 0000000..ecaf40e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-08-21-15-51-15.bpo-41609.JmiUKG.rst @@ -0,0 +1 @@ +The pdb whatis command correctly reports instance methods as 'Method' rather than 'Function'.
\ No newline at end of file |