Issue #23934: Fix inspect.signature to fail correctly for builtin types.

Initial patch by James Powell.
This commit is contained in:
Yury Selivanov 2015-05-30 17:08:36 -04:00
parent dce09c34a0
commit bf304fcb32
3 changed files with 14 additions and 2 deletions

View File

@ -2255,9 +2255,13 @@ def _signature_from_callable(obj, *,
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__

View File

@ -1980,9 +1980,14 @@ class TestSignatureObject(unittest.TestCase):
@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)

View File

@ -31,6 +31,9 @@ Library
- 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?
==================================