[Python-checkins] cpython (merge 3.5 -> default): Issue #23934: Fix inspect.signature to fail correctly for builtin types.

yury.selivanov python-checkins at python.org
Sat May 30 23:09:31 CEST 2015


https://hg.python.org/cpython/rev/19e0ffdd1daa
changeset:   96408:19e0ffdd1daa
parent:      96406:4a6d49e69a3a
parent:      96407:e59966bb6de5
user:        Yury Selivanov <yselivanov at sprymix.com>
date:        Sat May 30 17:09:15 2015 -0400
summary:
  Issue #23934: Fix inspect.signature to fail correctly for builtin types.

Initial patch by James Powell. (Merge 3.5)

files:
  Lib/inspect.py           |  6 +++++-
  Lib/test/test_inspect.py |  7 ++++++-
  Misc/NEWS                |  3 +++
  3 files changed, 14 insertions(+), 2 deletions(-)


diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2255,9 +2255,13 @@
             if type not in obj.__mro__:
                 # We have a class (not metaclass), but no user-defined
                 # __init__ or __new__ for it
-                if obj.__init__ is object.__init__:
+                if (obj.__init__ is object.__init__ and
+                    obj.__new__ is object.__new__):
                     # Return a signature of 'object' builtin.
                     return signature(object)
+                else:
+                    raise ValueError(
+                        'no signature found for builtin type {!r}'.format(obj))
 
     elif not isinstance(obj, _NonUserDefinedCallables):
         # An object with __call__
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -1980,9 +1980,14 @@
     @cpython_only
     def test_signature_on_builtins_no_signature(self):
         import _testcapi
-        with self.assertRaisesRegex(ValueError, 'no signature found for builtin'):
+        with self.assertRaisesRegex(ValueError,
+                                    'no signature found for builtin'):
             inspect.signature(_testcapi.docstring_no_signature)
 
+        with self.assertRaisesRegex(ValueError,
+                                    'no signature found for builtin'):
+            inspect.signature(str)
+
     def test_signature_on_non_function(self):
         with self.assertRaisesRegex(TypeError, 'is not a callable object'):
             inspect.signature(42)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -43,6 +43,9 @@
 
 - Issue #16991: Add a C implementation of OrderedDict.
 
+- Issue #23934: Fix inspect.signature to fail correctly for builtin types
+  lacking signature information.  Initial patch by James Powell.
+
 
 What's New in Python 3.5.0 beta 1?
 ==================================

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list