changeset: 96408:19e0ffdd1daa parent: 96406:4a6d49e69a3a parent: 96407:e59966bb6de5 user: Yury Selivanov date: Sat May 30 17:09:15 2015 -0400 files: Misc/NEWS description: Issue #23934: Fix inspect.signature to fail correctly for builtin types. Initial patch by James Powell. (Merge 3.5) diff -r 4a6d49e69a3a -r 19e0ffdd1daa Lib/inspect.py --- a/Lib/inspect.py Sat May 30 14:56:30 2015 -0600 +++ b/Lib/inspect.py Sat May 30 17:09:15 2015 -0400 @@ -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 -r 4a6d49e69a3a -r 19e0ffdd1daa Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Sat May 30 14:56:30 2015 -0600 +++ b/Lib/test/test_inspect.py Sat May 30 17:09:15 2015 -0400 @@ -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 -r 4a6d49e69a3a -r 19e0ffdd1daa Misc/NEWS --- a/Misc/NEWS Sat May 30 14:56:30 2015 -0600 +++ b/Misc/NEWS Sat May 30 17:09:15 2015 -0400 @@ -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? ==================================